코테 준비 29일차_10/13

Jieun·2일 전

코딩테스트 준비

목록 보기
23/24
  1. 자동차 종류별 특정 옵션이 포함된 자동차수 구하기
  • 초기 정답
SELECT CAR_TYPE, COUNT(*) AS CARS FROM CAR_RENTAL_COMPANY_CAR GROUP BY CAR_TYPE WHERE CAR_ID = 1, 2, 4, 5 ORDER BY CAR_TYPE;
  • 수정 포인트
    옵션 조건 처리 : OPTIONS 컬럼은 쉼표로 구분된 문자열 형태로 옵션을 담고 있으므로 LIKE 연산자를 사용하여 원하는 옵션이 포함되어 있는지 확인

  • 최종 정답

SELECT CAR_TYPE, COUNT(*) AS CARS FROM CAR_RENTAL_COMPANY_CAR WHERE OPTIONS LIKE '%통풍시트%' OR OPTIONS LIKE '%열선시트%' OR OPTIONS LIKE '%가죽시트%' GROUP BY CAR_TYPE ORDER BY CAR_TYPE;
  1. 덧칠하기
  • 핵심 아이디어

1) section 배열은 이미 오름차순으로 정렬되어 있음
2) 지금까지 페인트가 칠해진 마지막 위치를 기록할 변수(paintedUntil)를 0으로 두고 시작해
3) section을 순서대로 하나씩 확인하면서 칠해야 되는 구역(s)이 paintedUntil보다 크면 아직 안칠해진 구역임. 그럴 롤러 수를 1 증가하고 paintedUntil을 s + m -1로 업데이트 해줌(현재 위치 s부터 m칸 까지는 한번에 칠해지니까) 만약 s가 paintedUntil 이하라면 이미 칠해진 곳이니까 넘어가면 됨

  • 최종 정답
class Solution {
    public int solution(int n, int m, int[] section) {
        int answer = 0;
        int paintedUntil = 0;
        
        for(int s : section) {
            if(s>paintedUntil) {
                answer++;
                paintedUntil = s + m -1;
            }
        }
        return answer;
    }
}
  1. 바탕화면 정리
  • 핵심 아이디어

1) 바탕화면 전체를 순회하면서 #이 있는 모든 위치(r, c)를 확인해
2) 모든 #들 중에서 가장 작은 행 번호 -> lux의 최솟값
가장 작은 열 번호 -> luy의 최솟값
가장 큰 행 번호 -> rdx의 최댓값 +1
가장 큰 열 번호 -> rdy의 최댓값 +1
3) 구한 값들을 배열 형태로 리턴하면 됨

  • 최종정답
class Solution {
    public int[] solution(String[] wallpaper) {
        int lux = Integer.MAX_VALUE;
        int luy = Integer.MAX_VALUE;
        int rdx = Integer.MIN_VALUE;
        int rdy = Integer.MIN_VALUE;
        
        for(int r = 0; r < wallpaper.length; r++) {
            for (int c = 0; c < wallpaper[r].length();c++) {
                if(wallpaper[r].charAt(c) == '#') {
                    lux = Math.min(lux,r);
                    luy = Math.min(luy, c);
                    rdx = Math.max(rdx, r+1);
                    rdy = Math.max(rdy, c+1);
                }
            }
        }
        return new int[] {lux, luy, rdx, rdy};
    }
}
profile
비전공자의 백엔드 생존기: 어제보다 1% 더 성장하기

0개의 댓글