*문제 출처는 프로그래머스에 있습니다.
문제 제목: 124 나라의 숫자 (2단계)
문제 사이트: https://school.programmers.co.kr/learn/courses/30/lessons/12899
문제 설명
나의 풀이
def solution(n):
answer = ''
onet = ''
while n:
onet += str(n % 3)
n -= 1
n //= 3
for i in range(len(onet)):
if onet[i] == '2':
answer += '4'
elif onet[i] == '1':
answer += '2'
elif onet[i] == '0':
answer += '1'
return answer
문제를 보고 1, 2, 4만 나온다는 사실을 알게되고 3진수를 이용해서 풀면 되겠다는 생각이 들었다.
문제점을 찾았는데
1. 124 나라에는 숫자 0이 없다
2. 3의 배수일때 4가 나와야한다.
3. 3의 배수에서 1를 빼야한다.
위 문제점을 해결한 코드다
def solution(n):
answer = ''
result = []
while n:
t = n % 3
if not t:
t = 4
n -= 1
result.append(str(t))
n //= 3
answer = ''.join(result[::-1])
return answer
위 코드는 사용하여 3일때 4가 나와야 한다는 사실을 알았다. 숫자 3의 배수만 제외하면 나머지는 3진수와 동일했다.
그래서 3의 배수일 때만 t에 숫자 4를 넣어서 출력하니깐 답이 나왔다.
그리고 n -= 1을 해야하는 이유는 3의 배수일때 4만 출력하는 것을 방지할 수 있고 124 나라에는 숫자 0이 없어서 그렇다.
※ 알아야 할 것
answer = ''.join(result[::-1])
위 코드처럼 사용하면 리스트 배열의 역순으로 answer 문자열에 추가할 수 있다.
'코딩테스트(프로그래머스 & 백준) > 프로그래머스-Python' 카테고리의 다른 글
Programmers / 단어 변환 / Python (0) | 2024.04.16 |
---|---|
Programmers / 이중우선순위큐 / Python (0) | 2024.04.12 |
Programmers / 점 찍기 / Python (0) | 2024.04.09 |
Programmers / 가장 큰 수 / Python (0) | 2024.04.08 |
Programmers / 오픈채팅방 / Python (1) | 2024.04.05 |