코테 준비 28일차_10/8

Jieun·2026년 10월 8일

코딩테스트 준비

목록 보기
22/24
  1. 자동차 평균 대여 기간 구하기
  • 초기 정답
SELECT CAR_ID, AVERAVE(DATE(END_DATE - START_DATE), 2) AS AVERAGE_DURATION WHERE AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC,CAR_ID DECS;
  • 주요 오류 원인 분석

1) 오타 및 예약어 오류
- AVERAVE -> 함수명 오타. AVG 써야함
- DESC -> 내림차순 키워드 오타. DESC로 써야함

2) 날짜 차이 계산 오류 (+1일 필수)
- 당일 대여 및 반납은 대여기간이 1일이어야 함
- DATEIFF(END_DATE, START_DATE) +1를 해야 정확한 대여 일수가 나옴

3) GROUP BY 및 HAVING 절 누락
- 자동차ID별 평균을 구하려면 GROUP BY CAR_ID가 필요함.
- 집계함수(AVG) 조건은 WHERE 절이 아닌 HAVING 절에서 처리함

4) 반올림 함수
- 소수점 두번째 자리에서 반올림하여 소수점 첫째자리까지 표현해야 하므로 ROUND 사용함

  • 최종 정답
SELECT CAR_ID, ROUND(AVG(DATEDIFF(END_DATE, START_DATE)+1), 1) AS AVERAGE_DURATION FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY GROUP BY CAR_ID HAVING AVERAGE_DURATION >= 7 ORDER BY AVERAGE_DURATION DESC, CAR_ID DESC;
  1. 최대공약수와 최소공배수
  • 접근방법

1) 최대공약수(GCD) : 유클리드 호제법을 사용. a를 b로 나눈 나머지를 r이라고 할 때 gcd(a, b) = gcd(b, r) 성질을 이용해 나머지가 0이 될때까지 재귀나 반복문으로 구함

2) 최소공배수(LCM) : 두 수의 곱을 최대공약수로 나누면 됨(n * m / gcd)

  • 최종 정답
class Solution {
    public int[] solution(int n, int m) {
    int gcd = getGcd(n. m);
    int lcm = (n*m) / gcd;
    
    return new int[] {gcd, lcm};
    }
    
    private int getGcd(int a, int b) {
    	while(b != 0) {
        	int r = a %b;
            a = b;
            b = r;
    }
    return a;
    }
}
  1. 서울에서 김서방 찾기
  • 초기 정답
class Solution {
    public String solution(String[] seoul) {
        int result = 0;
        for(int i = 0; i <seoul.length;i++) {
            if(seoul[i] == "Kim") {
                result = i;
            }
        }
        return "김서방은 " + result + "에 있다";
    }
}
  • 틀린 이유
    문자열의 값을 비교할 때는 .equals() 메소드 사용

  • 최종 정답

class Solution {
    public String solution(String[] seoul) {
        int result = 0;
        for(int i = 0; i <seoul.length;i++) {
            if(seoul[i].equals("Kim")) {
                result = i;
            }
        }
        return "김서방은 " + result + "에 있다";
    }
}
profile
비전공자의 백엔드 생존기: 어제보다 1% 더 성장하기

0개의 댓글