20회차 코딩테스트

2026-09-30 · Java 2문제 · SQL 2문제 · 2 PASS / 2 FAIL

Java FAIL(숫자 문자열과 영단어)은 제출 코드 칸이 비어 있어 실패 원인을 단정하지 않았다. SQL FAIL은 제출 코드와 정답 풀이가 모두 있어 차이를 직접 비교했다. 아래 로컬 검증은 프로그래머스 재채점 결과가 아니다.

20회차

x만큼 간격이 있는 n개의 숫자

한 줄 요약앞의 값에 x를 계속 더한다. 마지막 값이 최대 100억이라 long이 필요하다.

쉽게 말하면계단을 한 칸에 x씩 오르는데, 1,000칸을 오르면 int라는 건물 높이(약 21억)를 뚫고 나간다.
PASS · 원문 기록2026.09.30 · 20회차

문제 원문 · 제출 코드

class Solution {
    public long[] solution(int x, int n) {
        long[] answer = new long[n];
        answer[0]=x;
        for(int i=1;i<answer.length;i++){
            answer[i]= answer[i-1]+x;
        }
        return answer;
    }
}
식x = 10,000,000, n = 1000
x * n (int끼리)1,410,065,408 — 넘침
(long)(x * n)1,410,065,408 — 넘친 뒤라 늦음
(long) x * n10,000,000,000 — 곱하기 전에 변환
제출 코드 마지막 값10,000,000,000 — 누적 변수가 long
로컬 검증
경계 x 6개 × n 1~1000 + 무작위 20,000 → 26,000개 통과
기댓값: (long) x * (i+1) 곱셈으로 따로 계산
20회차

숫자 문자열과 영단어

한 줄 요약영단어 배열의 인덱스가 곧 숫자다. zero~nine을 차례로 숫자로 바꾼 뒤 parseInt 한다.

쉽게 말하면"one4seveneight"에서 단어들을 번호표로 바꿔 끼우면 "1478"이 남는다.
FAIL · 원문 기록2026.09.30 · 20회차

문제 원문 · 정답 풀이

제출 코드: 원문에 없음. FAIL 결과와 정답 풀이만 남아 있다.

String[] words = {"zero","one","two","three","four",
                  "five","six","seven","eight","nine"};
for (int i = 0; i < words.length; i++) {
    s = s.replace(words[i], Integer.toString(i));   // 다시 담아야 반영된다
}
return Integer.parseInt(s);
  • String은 불변 — s.replace(...)만 쓰면 원본은 그대로. "banana"는 다시 담지 않으면 banana, 담으면 bonono.
  • replace는 글자 그대로 모두 바꾸고, replaceAll은 정규식으로 찾는다.
  • 반환값은 최대 20억이라 int에 들어간다. 더 크면 Long.parseLong. 영문자가 남아 있으면 NumberFormatException.
로컬 검증
공식 예제 4개 통과
문제가 입력을 만드는 방식대로 무작위 인코딩 50,000개 + 경계 4개 통과
(전부 영단어인 20억 "twozerozerozerozerozerozerozerozerozero" 포함)
20회차

동물의 아이디와 이름

한 줄 요약필요한 두 컬럼만 고르고 ID 순으로 정렬한다.

쉽게 말하면명부에서 번호와 이름 칸만 옮겨 적고 번호 순서대로 세운다.
PASS · 원문 기록2026.09.30 · 20회차

문제 원문 · 제출 코드

SELECT ANIMAL_ID, NAME
from ANIMAL_INS
order by ANIMAL_ID;

ORDER BY 뒤에 ASC를 쓰지 않으면 오름차순이다.

20회차

대여 기록이 존재하는 자동차 리스트 구하기

한 줄 요약1:N 조인은 "1" 쪽 행을 대여 기록 수만큼 늘린다. 중복 없는 목록이 필요하면 DISTINCT.

쉽게 말하면10월에 세 번 빌려 간 차는 대여 장부에 세 줄로 적혀 있다. 차 목록을 만들 땐 한 번만 적어야 한다.
FAIL · 원문 기록2026.09.30 · 20회차

문제 원문 · 제출 코드 · 정답 풀이

SELECT DISTINCT H.CAR_ID      -- 제출 코드에는 DISTINCT 가 없었다
FROM CAR_RENTAL_COMPANY_CAR C JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H ON
C.CAR_ID = H.CAR_ID
WHERE C.CAR_TYPE = '세단' AND MONTH(H.START_DATE) = 10
ORDER BY H.CAR_ID DESC;

제출 코드와 정답 풀이의 차이는 DISTINCT 한 단어다. 문제는 "자동차 ID 리스트는 중복이 없어야 한다"고 요구한다.

  • 목록에서 중복만 없애면 DISTINCT, 묶어서 개수·합계를 구하면 GROUP BY.
  • MONTH(START_DATE) = 10은 시작일 기준이다. 여러 해가 섞이면 연도도 함께 본다.
로컬 검증 (SQLite)
제출 코드 (DISTINCT 없음)  → 3, 3, 3, 1
정답 풀이 (DISTINCT)       → 3, 1
GROUP BY H.CAR_ID          → 3, 1
차마다 10월 대여 횟수       → 3|3, 1|1
9월 시작 · 10월 종료 대여   → 제외

로컬 검증과 범위

Java는 CodingTest20Test.java, SQL은 verify-sql20.mjs(Node 내장 SQLite 3.53, 메모리 DB)로 확인했다. SQL 파일을 그대로 읽어 실행한다. SQLite에 없는 MONTH()는 같은 이름의 함수를 등록해 제출 SQL을 바꾸지 않았다. 로컬 MariaDB 접속 정보는 쓰지 않았다.