728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

현재 칠해야하는 위치(wall)가

 

현재 롤러의 위치(index)보다 크거나 같을 경우,

 

이 말은

 

새롭게 페인트를 칠해야한다는 말과 같습니다.

 

그렇기에 cnt를 +1 해주고

 

롤러의 위치(index)를 wall + m을 통해

 

페인트를 칠한 후의 위치로 옮겨 주면 됩니다.

 

그리고 롤러의 위치가 주어진 벽의 길이(n)를 넘어선다면

 

모든 벽을 칠한 것이기 때문에 break해주어 빠르게 끝내면 됩니다.

 

 

코드

 

class Solution {
    public int solution(int n, int m, int[] section) {
        int index = 0, cnt = 0;
        
        for(int wall : section){
            if(index <= wall){
                cnt++;
                index = wall + m;
            }
            if(index > n) break;
        }
        
        return cnt;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/86971

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

선분을 하나씩 제거하면서 BFS로 방문 후 나눠진 전력망의 크기를 비교했습니다.

 

 

코드

 

import java.util.*;

class Solution {
    static List<Integer>[] list;
    static boolean[] visited;
    
    public int solution(int n, int[][] wires) {
        int start = 0, end = 0, A = 0, B = 0, diff = 0, min = Integer.MAX_VALUE;
        list = new ArrayList[n+1];
        
        for(int i = 0; i <= n; i++){
            list[i] = new ArrayList<>();
        }
        
        for(int i = 0; i < wires.length; i++){
            start = wires[i][0];
            end = wires[i][1];    
            list[start].add(end);
            list[end].add(start);
        }
        
        for(int i = 0; i <  wires.length; i++){
            start = wires[i][0];
            end = wires[i][1];
            visited = new boolean[n+1];
            
            A = check(start, end);
            B = n - A;
            diff = Math.abs(B - A);
            if(diff == 0) return 0;
            min = Math.min(min, diff);
        }
        
        
        return min;
    }
    
    public int check(int start, int exclude){
        int cnt = 0;        
        Queue<Integer> q = new ArrayDeque<>();
        q.offer(start);
        visited[start] = true;
        
        while(!q.isEmpty()){
            int now = q.poll();
            cnt++;
            for(Integer next : list[now]){
                if(visited[next] || exclude == next) continue;
                visited[next] = true;
                q.offer(next);
            }
        }
        
        return cnt;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/77884

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

  1. 먼저, 1부터 주어진 수의 제곱근까지의 범위에서 반복합니다. 이 범위를 선택하는 이유는 주어진 수의 약수는 해당 수의 제곱근보다 클 수 없기 때문입니다. 만약 제곱근보다 큰 약수가 존재한다면, 해당 약수는 이미 이전에 제곱근 이하의 약수에서 포함되었을 것입니다.
  2. 주어진 수를 반복하는 동안, 해당 수를 현재 인덱스로 나누어떨어지는지 확인합니다. 나누어떨어지면 현재 인덱스는 해당 수의 약수이므로 카운트를 증가시킵니다.
  3. 만약 나누어떨어진 수가 현재 인덱스와 같다면, 이는 제곱수임을 의미합니다. 예를 들어, 9의 약수 중 3은 제곱근인 √과 같으므로 제곱수입니다. 따라서 카운트를 증가시킵니다.
  4. 그렇지 않은 경우에는 현재 인덱스와 나누어떨어진 수의 약수가 모두 카운트에 포함되므로, 카운트를 2 증가시킵니다.
  5. 반복이 완료되면 약수의 총 개수를 반환합니다.

예를 들어,인 경우

  1. 일 때, 12를 1로 나누면 나누어떨어지므로 약수이며, 카운트는 +2 증가합니다.
  2. 일 때, 12를 2로 나누면 나누어떨어지므로 약수이며, 카운트는 +2 증가합니다.
  3. 일 때, 12를 3으로 나누면 나누어떨어지므로 약수이며, 카운트는 +2 증가합니다.

이렇게 하여 의 약수의 개수는 6이 됩니다.

 

예를 들어,인 경우

  1. 일 때, 12를 1로 나누면 나누어떨어지므로 약수이며, 카운트는 +2 증가합니다.
  2. 일 때, 12를 2로 나누면 나누어떨어지므로 약수이며, 카운트는 +2 증가합니다.
  3. 일 때, 12를 3으로 나누면 나누어떨어지지 않으므로 약수가 아닙니다.
  4. 일 때, 12를 4으로 나누면 나누어떨어지고 제곱근이므로, 카운트는 +1 증가합니다.

이렇게 하여 의 약수의 개수는 5이 됩니다.

 

 

 

코드

 

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        for(int i = left; i <= right; i++){
            if(flag(i)%2 == 0){
                answer+=i;
            }else{
                answer-=i;
            }
        }
        return answer;
    }
    
    public int flag(int n){
        int count = 0;
        for(int i = 1; i <= Math.sqrt(n); i++){
            if (n % i == 0) {
                if (n / i == i) { // 제곱수인 경우
                    count++;
                } else { // 제곱수가 아닌 경우
                    count += 2;
                }
            }
        }
        
        return count;
    }
}

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/157340

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

 

 

 

코드

 

SELECT 
    CAR_ID,
    CASE 
        WHEN '대여중' IN(
            SELECT 
                CASE
                    WHEN '2022-10-16' BETWEEN START_DATE AND END_DATE THEN '대여중'
                    ELSE '대여 가능'
                END RANTAL
            FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY SUB
            WHERE SUB.CAR_ID = ORIGINAL.CAR_ID
        ) THEN '대여중'
        ELSE '대여 가능'
    END AVAILABILITY
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY ORIGINAL
GROUP BY CAR_ID
ORDER BY CAR_ID DESC;

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/164670

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

 

 

 

코드

 

SELECT U.USER_ID, U.NICKNAME, 
CONCAT(U.CITY,' ', U.STREET_ADDRESS1, ' ', U.STREET_ADDRESS2) 전체주소, 
CONCAT(SUBSTR(U.TLNO,1,3),'-',SUBSTR(U.TLNO,4,4),'-',SUBSTR(U.TLNO,8)) 전화번호
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_USER U ON U.USER_ID = B.WRITER_ID
GROUP BY U.USER_ID
HAVING COUNT(U.USER_ID) >= 3
ORDER BY U.USER_ID DESC

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/131123

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

 

 

 

코드

 

SELECT R.FOOD_TYPE, R.REST_ID, R.REST_NAME, R.FAVORITES
FROM REST_INFO R
JOIN (
    SELECT FOOD_TYPE, MAX(FAVORITES) MAX
    FROM REST_INFO
    GROUP BY FOOD_TYPE) M ON R.FOOD_TYPE = M.FOOD_TYPE
WHERE R.FAVORITES = MAX
ORDER BY R.FOOD_TYPE DESC

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/157341

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

 

 

 

코드

 

SELECT CAR_ID
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-10%'
AND CAR_ID IN(
    SELECT CAR_ID
    FROM CAR_RENTAL_COMPANY_CAR
    WHERE CAR_TYPE LIKE '세단')
GROUP BY CAR_ID
ORDER BY CAR_ID DESC

 

 

 

 

 

 

 

다음에 또 봐요

 

728x90

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/164668

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 - 나의 생각

 

 

 

 

코드

 

SELECT WRITER_ID, (
    SELECT NICKNAME
    FROM USED_GOODS_USER
    WHERE USER_ID LIKE WRITER_ID
) NICKNAME,SUM(PRICE) TOTAL_SALES
FROM USED_GOODS_BOARD
WHERE STATUS LIKE 'DONE'
GROUP BY WRITER_ID
HAVING TOTAL_SALES >= 700000
ORDER BY TOTAL_SALES

 

 

 

 

 

 

 

다음에 또 봐요

 

+ Recent posts