[프로그래머스] 바탕화면 정리 풀이
2025. 8. 25. 13:02ㆍ프로그래머스 코테 연습
728x90
TIL (Today I Learned) - 코딩테스트 디버깅 경험
📅 날짜
2025년 8월 25일
🎯 주제
프로그래머스 "바탕화면 정리" 문제 해결 과정에서 배운 것들
🚨 문제 상황
프로그래머스의 "바탕화면 정리" 문제를 풀면서 20개 테스트케이스 중 4개가 계속 틀렸다. 코드 로직은 분명히 맞는 것 같은데 왜 틀렸을까?
def solution(wallpaper):
answer = []
n = len(wallpaper)
maps = []
for i in range(n):
m = list(wallpaper[i])
maps.append(m)
minX = len(maps[0]) # 🚨 여기가 문제!
minY = len(maps) # 🚨 여기도 문제!
maxX = -1
maxY = -1
# ... 나머지 코드
🔍 문제 분석
처음엔 다양한 반례를 생각해봤다:
- 파일이 없는 경우 → 문제에서 "적어도 하나의 파일이 있다"고 명시됨
- 경계값 처리 문제 → 로직상 문제없어 보임
- 좌표 순서 혼동 → 이것도 맞는 것 같은데...
하지만 진짜 문제는 변수 초기화에 있었다!
💡 깨달은 것
1. 변수명과 실제 의미의 불일치
# 잘못된 초기화
minX = len(maps[0]) # X는 행(세로)인데 열 개수로 초기화
minY = len(maps) # Y는 열(가로)인데 행 개수로 초기화
# 올바른 초기화
minX = len(maps) # 행 개수로 초기화 (세로 좌표의 최댓값)
minY = len(maps[0]) # 열 개수로 초기화 (가로 좌표의 최댓값)
2. 좌표계에 대한 명확한 이해
문제에서 좌표는 (세로 좌표, 가로 좌표) 형태였다:
- X좌표 = 세로 좌표 = 행 인덱스
- Y좌표 = 가로 좌표 = 열 인덱스
이 기본 개념을 헷갈려서 초기화를 잘못했다.
🎓 배운 교훈
1. 변수명의 중요성
minX, minY 같은 변수명을 사용할 때는 X, Y가 정확히 무엇을 의미하는지 명확히 해야 한다. 더 명확한 이름을 사용하는 게 좋겠다:
min_row = len(maps) # 더 명확함
min_col = len(maps[0]) # 더 명확함
2. 초기값 설정의 중요성
min 값을 찾을 때는 충분히 큰 값으로, max 값을 찾을 때는 충분히 작은 값으로 초기화해야 한다. 하지만 논리적으로 맞는 값으로 초기화해야 한다는 점이 핵심이다.
3. 디버깅 시 의심해볼 포인트들
- 경계값 처리
- 초기화 값
- 좌표계 이해
- 변수명과 실제 의미의 일치성
🔧 수정된 코드
def solution(wallpaper):
answer = []
n = len(wallpaper)
maps = []
for i in range(n):
m = list(wallpaper[i])
maps.append(m)
min_row = len(maps) # 올바른 초기화
min_col = len(maps[0]) # 올바른 초기화
max_row = -1
max_col = -1
for row in range(len(maps)):
for col in range(len(maps[0])):
if maps[row][col] == '#':
max_row = max(max_row, row)
min_row = min(min_row, row)
max_col = max(max_col, col)
min_col = min(min_col, col)
answer.extend([min_row, min_col, max_row + 1, max_col + 1])
return answer
🎯 결론
간단해 보이는 실수가 가장 찾기 어려운 버그가 될 수 있다. 특히 변수 초기화나 좌표계 이해 같은 기본적인 부분에서 실수가 나면, 로직이 아무리 완벽해도 일부 테스트케이스에서 실패할 수 있다.
앞으로는 변수명과 의미의 일치성, 올바른 초기화에 더 신경써야겠다.
728x90
'프로그래머스 코테 연습' 카테고리의 다른 글
| 다익스트라 탬플릿 코드 (0) | 2024.06.18 |
|---|---|
| 프로그래머스 - 햄버거 만들기 (1) | 2022.11.08 |
| 프로그래머스 - 연습 문제 - 가장 긴 팬린드롬 (2) | 2022.09.20 |
| 프로그래머스 연습 문제 - 올바른 괄호 (0) | 2022.08.17 |