🔗 1. 문제 URL
https://school.programmers.co.kr/learn/courses/30/lessons/181921
프로그래머스
SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
📝 2. 문제 요구사항 정리
정수 l과 r이 주어졌을 때, l 이상 r 이하의 정수 중에서 숫자 0과 5로만 이루어진 수를 모두 찾아 배열로 반환하는 문제입니다.
- 탐색 범위: l부터 r까지의 모든 정수를 확인합니다.
- 조건: 각 정수를 문자열로 바꿨을 때 모든 문자가 0 또는 5여야 합니다.
- 예외 처리: 조건을 만족하는 수가 하나도 없다면 [-1]을 반환합니다.
💡 3. 핵심 개념
✔ 1) 숫자를 문자열로 변환해 자리수 확인하기
각 숫자의 모든 자리수가 0 또는 5인지 확인해야 하므로, 숫자를 문자열로 변환하면 한 글자씩 쉽게 검사할 수 있습니다. 예를 들어 505는 문자열 "505"로 바꾼 뒤 각 문자가 "0" 또는 "5"에 포함되는지 확인하면 됩니다.
✔ 2) all() 함수로 모든 조건 만족 여부 확인하기
Python의 all() 함수는 반복 가능한 값들이 모두 True일 때만 True를 반환합니다. 따라서 all(char in "05" for char in str(cur))처럼 작성하면 현재 숫자의 모든 자리수가 0 또는 5인지 간단하게 확인할 수 있습니다.
✔ 3) 조건을 만족하는 값이 없는 경우 처리하기
문제에서는 조건을 만족하는 정수가 없다면 -1이 담긴 배열을 반환해야 합니다. 따라서 탐색이 끝난 뒤 answer가 비어 있는지 확인하고, 비어 있다면 -1을 추가해 예외 상황을 처리합니다.
✅ 4. 정답 Python 코드
def solution(l, r):
# 없는 경우 -1 리턴 예외처리
answer = []
for cur in range(l, r + 1):
# 0이나 5 이외의 숫자가 들었다면
if all(char in "05" for char in str(cur)):
answer.append(cur)
if len(answer) == 0:
answer.append(-1)
return answer
💬 5. 풀이하면서 느낀 점
처음에는 숫자의 각 자리수를 직접 나누어 확인하는 방식도 생각할 수 있지만, Python에서는 문자열로 변환하면 훨씬 간단하게 조건을 검사할 수 있었습니다.
특히 all()과 제너레이터 표현식을 함께 사용하면 모든 자리수가 조건을 만족하는지 한 줄로 확인할 수 있어 코드가 깔끔해졌습니다. 조건을 만족하는 수가 없을 때 [-1]을 반환해야 한다는 예외 처리도 마지막에 한 번만 확인하면 되어 흐름이 단순했습니다.
궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊
'코딩테스트 > 알고리즘' 카테고리의 다른 글
| [프로그래머스 LV.2] 괄호 회전하기 — Python 정답 & 해설 (0) | 2026.06.16 |
|---|---|
| [프로그래머스 LV.0] 유한소수 판별하기 — Python 정답 & 해설 (1) | 2026.06.13 |
| [프로그래머스 LV.0] 배열 조각하기 — Python 정답 & 해설 (0) | 2026.06.11 |
| [프로그래머스 LV.2] 행렬의 곱셈 — Python 정답 & 해설 (0) | 2026.05.22 |
| [프로그래머스 LV.1] 모의고사 — Python 정답 & 해설 (0) | 2026.05.21 |