알고리즘 시험을 위해 한 달동안 100문제를 풀어보려고 한다.
알고리즘에 대한 사전 공부를 해 본적 없었기 때문에 프로그래머스의 level2부터 시작해보려고 한다.
한 달 공부의 목적은 처음부터 모범 답안 참고없이 풀기보다는,
알고리즘 문제 유형을 익혀보기로 했다.
유형에대한 정리와 풀이를 나름대로 정리해보는 시간을 가질 것이다.
1/100 , 프로그래머스 124 나라의 숫자(12899)
1. 문제
https://programmers.co.kr/learn/courses/30/lessons/12899
문제 설명
124 나라가 있습니다. 124 나라에서는 10진법이 아닌 다음과 같은 자신들만의 규칙으로 수를 표현합니다.
- 124 나라에는 자연수만 존재합니다.
- 124 나라에는 모든 수를 표현할 때 1, 2, 4만 사용합니다.
예를 들어서 124 나라에서 사용하는 숫자는 다음과 같이 변환됩니다.
10진법124 나라10진법124 나라
1 | 1 | 6 | 14 |
2 | 2 | 7 | 21 |
3 | 4 | 8 | 22 |
4 | 11 | 9 | 24 |
5 | 12 | 10 | 41 |
자연수 n이 매개변수로 주어질 때, n을 124 나라에서 사용하는 숫자로 바꾼 값을 return 하도록 solution 함수를 완성해 주세요.
제한사항
- n은 500,000,000이하의 자연수 입니다.
입출력 예 (n / result)
1 | 1 |
2 | 2 |
3 | 4 |
4 | 11 |
2. 문제 풀이
해당 문제는 n 진법 문제와 동일하다고 생각하면 된다.
0~n-1 까지의 수만을 이용하여 수를 생성하면 된다.
Key Point
목표 값을 n으로 나눈 나머지 값을 이용하는데,
나머지 값이 0일 경우, 몫을 n으로 나누고 그 값에 -1을 해주어야 한다.
3. 답변
def solution(n):
li = ['1','2','4']
answer =''
while True:
if n <= 0 : break
print("n", n)
num = li[n % 3 - 1]
if n % 3 == 0 :
n = n // 3 -1
else :
n = n // 3
answer += str(num)
return ''.join(reversed(answer))
추가
1. while문
-> while 조건: 을 이용하여 수정해보자
2. reversed의 사용
'결과값 = 이전 값 + 현재 값' 이라는 수식으로 현재 값일 수록 가장 앞에 와야하기 때문에,
최종 결과에 reversed를 해주고 있다.
-> '결과값 = 현재 값 + 이전 값'으로 수정하여 reversed 구문을 제거하자.
def solution(n):
answer =''
while n > 0:
num = '124'[n % 3 - 1]
answer = num + answer
n = n // 3
if n % 3 == 0 :
n -= 1
return answer
'Python' 카테고리의 다른 글
[알고리즘 기본 독학] 3/100, 프로그래머스 주식가격(42584) - 큐/스택 (1) | 2020.04.12 |
---|---|
[알고리즘 기본 독학] 2/100, 프로그래머스 기능개발(42586) - 큐/스택 (0) | 2020.04.12 |
[Python/프로그래머스] 12932_자연수 뒤집어 배열로 만들기 - reverse (0) | 2020.04.02 |
[Python/프로그래머스] 12931_자릿수 더하기 - 재귀 함수 (0) | 2020.04.02 |
[Python/프로그래머스] 12930_이상한 문자 만들기 - [ a if x조건 else b for x in 리스트 ] (0) | 2020.04.02 |