본문 바로가기
✨BACKEND/📍Database

[코딩테스트] 프로그래머스 MySQL: 특정 물고기를 잡은 총 수 구하기

by 짱돌보리 2026. 2. 23.
728x90

프로그래머스 MySQL: 특정 물고기를 잡은 총 수 구하기

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

낚시앱 데이터베이스에서
특정 물고기(BASS, SNAPPER)를 몇 마리 잡았는지 구하는 SQL 문제다.

 

테이블은 두 개로 구성되어 있다.

 

FISH_INFO 👉 잡은 물고기 정보 (종류는 숫자로 저장)

ID FISH_TYPE LENGTH TIME
0 0 30 2021/12/04
1 0 50 2020/03/07
2 0 40 2020/03/07
3 1 20 2022/03/09
4 1 NULL 2022/04/08
5 2 13 2021/04/28
6 0 60 2021/07/27

 

FISH_NAME_INFO 👉 물고기 종류 번호와 실제 이름 매핑 정보

FISH_TYPE FISH_NAME
0 BASS
1 SNAPPER
2 ANCHOVY

 

 

여기서 중요한 포인트는 물고기 종류가 숫자로 저장되어 있다는 것이다.

 

즉, 단순히 FISH_TYPE = 0처럼 작성하는 것이 아니라,
👉 이름 기준으로 안전하게 조회하는 방식을 고민해야 하는 문제였다.

처음에는 이렇게 접근했다.

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO
WHERE FISH_TYPE = 0 OR FISH_TYPE = 1;

 

코드 실행은 정상적으로 통과

 

하지만 ❌ 테스트 케이스 실패

🤔 왜 실패했을까?

나는 FISH_TYPE = 0, FISH_TYPE = 1이 각각 BASS, SNAPPER라고 가정하고 작성했다.

 

하지만 코딩 테스트에서는 👉 ID 값은 언제든 바뀔 수 있다고 가정해야 한다.

 

즉,

지금은 0 = BASS일 수 있지만

테스트 환경에서는 3 = BASS일 수도 있음!!

 

이렇게 되면 하드코딩한 숫자 조건은 전부 무너진다.

💡 문제의 핵심

이 문제에는 FISH_INFO 테이블과 어종 이름이 들어있는 FISH_NAME_INFO 테이블이 따로 존재했다.

 

즉, 이름을 기준으로 판단해야 하는 구조였다.

 

실제 코딩 테스트나 실무에서는 “값”이 아니라 “의미”를 기준으로 작성하는 것이 안전하다!

✅ 수정한 쿼리

SELECT COUNT(*) AS FISH_COUNT
FROM FISH_INFO FI
JOIN FISH_NAME_INFO FNI 
    ON FI.FISH_TYPE = FNI.FISH_TYPE
WHERE FNI.FISH_NAME IN ('BASS', 'SNAPPER');

 

👉 이제 어떤 테스트 데이터가 들어와도 안전하다.

 

코딩 테스트에서 ID를 하드코딩하지 말고,
항상 “의미 있는 값(이름, 상태 등)”을 기준으로 작성하자.