- 문제 : https://school.programmers.co.kr/learn/courses/30/lessons/12899
Lv2 문제다!
숫자 3과 연관이 무조건 있다고 생각해 나름 로직을 생각했으나, 답까지는 작성 못했다.
그래서 풀이를 찾아봤는데, 모두 좋은 것 같아 기록해보려한다.
124 나라의 특징은 다음과 같다.
- 1 = 1, 2=2, 3= 4이다.
- 4부터 자릿수가 늘어난다 4 = 11
- 7에서 앞자리 수가 바뀐다 7 = 21
- 10에서 앞자리 수가 2로 커진다 10 = 41
규칙
- 3으로 나눠지지 않는 경우
- 이 경우는 1,2가 가능한데, 이는 124 나라의 숫자이므로 사용가능한 숫자들이다
- 3으로 나눠지는 경우
- 3진법에서 3으로 나누어 떨어지는 수는 일의 자리가 0이 된다. 124 나라에서는 이 일의 자리수를 4로 변경한다
- 3으로 나눈 몫에서 1을 뺀 값이 10의 자리 수 이상이다
- 여기에서 왜 다음 n을 n // 3이 아닌 n // 3 - 1로 했는지 이유를 찾아봤다.
- 숫자 문자들을 오른쪽으로 추가했으므로, 원래 답과 반대 방향이라 역순으로 반환해주면 된다
- 정답 풀이 1 :
def solution(n):
answer = ''
while n:
#3의 배수가 아닌 경우 -> 1,2
if n % 3:
answer += str(n % 3)
n //= 3
#3의 배수인 경우
else:
answer += '4'
n = n // 3 - 1
return answer[ : : -1]
- 정답 풀이 2:
3으로 나눴을 때 나머지가
0일 때 -> 1
1일 때 -> 2
2일 때 -> 4
인 것을 num의 인덱스로 활용한 풀이다.
def change124(n):
num = ['1','2','4']
answer = ""
while n > 0:
n -= 1
answer = num[n % 3] + answer
n //= 3
'코딩테스트 > 기출' 카테고리의 다른 글
[월간 코드 챌린지 1 / 프로그래머스] 68936번 : 쿼드압축 후 개수 (1) | 2022.10.11 |
---|---|
[월간 코드 챌린지1 / 프로그래머스] 68645번 : 삼각 달팽이 (0) | 2022.10.11 |
[연습 문제 / 프로그래머스] 131127번 : 할인 행사 (0) | 2022.10.10 |
[월간 코드 챌린지 시즌2 / 프로그래머스] 77885번 : 2개 이하로 다른 비트 (0) | 2022.10.05 |
[2018 KAKAO BLIND RECRUITMENT / 프로그래머스] 17686번 : [3차] 파일명 정렬 (0) | 2022.09.26 |