코딩 테스트/프로그래머스
[Python] 프로그래머스 배열 만들기 2
위시리
2024. 9. 20. 14:41
문제 분석
- 정수 l과 r을 입력 받고
- l부터 r까지 반복문 돌면서
- 숫자 0과 5로만 이루어진 수를 만나면
- 그 수들을 오름차순으로 저장한 배열 answer.append
- 만약 그런 정수가 없다면 return -1 - 예외 처리
코드 설계
- 어떻게 0과 5로만 이루어진 수를 판단할 것인가
l과 r의 자리를 파악하여 string으로 변환하여 1의 자릿수, 10의 자릿수, 100의 자릿수 .. 늘려가면서 파악할 것인가- 반복문으로 문자열을 하나씩 빼서 비교
str = "hello world"
for i in str :
print(i)
- 와 같이 하면 반복문으로 문자열의 문자를 한 문자씩 비교할 수 있다.
- 해당 숫자를 문자열 취급하여 한 문자씩 빼서 5나 0이 아닌 다른 문자가 있으면 contiue
- 아니면 answer.append를 해주고
- 마지막에 answer 배열의 길이가 0이라면 아무것도 들어있지 않은 것이므로 return -1
정답 코드
1차
def solution(l, r):
for i in range(l, r+1) :
i = str(i) # str 형변환
l_len = l%10
r_len = r%10
answer = []
return answer
구현하다가 영 아닌거 같다..
2차 - 실패
def solution(l, r):
answer = []
for i in range(l, r+1) :
for s in str(i):
if (s != '5') and (s != '0'):
continue
else :
answer.append(i)
if not answer :
return -1
return answer
print(solution(5,555))
이렇게 하면 예를 들어 '10'인 경우 1에서는 continue를 하지만 '0'에서는 append되어 10이 배열에 포함되어 버림
continue 할 때 그 숫자 i 자체를 넘겨버려야 함
이러한 문제를 해결하기 위해 어느 블로그에서는 check를 설정
3차 - 실패
def solution(l, r):
answer = []
for i in range(l, r+1) :
check = True
for s in str(i):
if (s != '5') and (s != '0'):
check = False
break # 반복문 빠져나오기
if check :
answer.append(i)
if not answer :
return -1
return answer
4차
def solution(l, r):
answer = []
for i in range(l, r+1) :
check = True
for s in str(i):
if (s != '5') and (s != '0'):
check = False
break # 반복문 빠져나오기
if check :
answer.append(i)
if not answer :
return [-1]
return answer
3차와의 다른 점은 return -1이 아니라 [-1]을 해줬다는 점
" 만약 그러한 정수가 없다면, -1이 담긴 배열을 return 합니다. "
질문을 잘 읽자..
다른 풀이
def solution(l, r):
answer = []
for num in range(l, r + 1):
if not set(str(num)) - set(['0', '5']):
answer.append(num)
return answer if answer else [-1]
- l부터 r까지 순회하면서
- 각 숫자를 문자열로 변환 후, 그 문자열을 집합으로 반환
- set 교집합을 이용하여 풀이한 경우도 있다.
Set
- 고유한 요소의 집합을 나타내는데 사용
- {} 또는 set() 함수를 통해 생성
- 순서 없음(인덱싱, 슬라이싱 불가능)
- 가변
- 해시 가능한 요소만 포함(예를 들어 리스트는 set에 포함될 수없음)