[programmers] 프로그래머스 Level2 124 나라의 숫자
(파이썬 Python)
* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제
1) 문제
2) 풀이 과정
1. 각 수를 3으로 나눠 본다.
Why? 규칙 게임에서는 곱하기보다 나눠야 경우의 수가 적어지니 대부분 몫과 나머지로 이용한 연산을 많이 사용
2. 3이상의 수부터 각 각의 수가 왜 그렇게 입력되는지 확인(규칙 게임이라는 걸 인지) 각 패턴 속 확인 가능한 정보 체크
3->4
4->11
5->12
6->14
7->21
8->22
9->24
10->41(<-31) : 특히 마지막의 10의 경우 원래는 31이어야 하는데 3은 4이기 때문에 41로
3. 나머지가 0인 경우와 0이 아닐 경우로 분리(위 그림 참고)
(빨간색 사각형(나머지0) : 3,6,9..)
(파란색 사각형(나머지0 x) : 그 외)
나머지가 0인 경우 : 나머지가 0 - > 일의 자리에 4 추가, 몫 -1 - > 십의 자리에 추가(십진법 기준)
나머지가 0이 아닌 경우 : 나머지가 1의 자리로 가고 가고 몫이 10의 자리로 감(십진법 기준)
* 처음부터 즉 n이 3일 경우 몫에서 -1을 뺀다는 것을 아는 것은 거의 불가, 여러 개를 해봐야 눈에 확인 가능.
< < 사고 과정 > >
1. 처음 문제를 볼 때 1,2,4로만 표기된다는 점에 착안
2. 개수적 접근으로 3개로 쓴다는 점 확인
3. 3진법으로 확인(개수로만) or 5진법(1,2,4가 쓰이니) 아닐까 생각
Why?
2진법 = 0,1 표기
3진법 = 0,1,2 표기
4진법 = 0,1,2,3 표기
5진법 = 0,1,2,3,4 표기
4. 개수 측면에서 5진법은 나중에 확인하고, 개수가 적은 3진법으로 미리 접근해보자
5. 규칙 찾는 게임 이런 문제는 "그림"으로 접근했을 때 더 직관적일 거라 판단.
3) 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
def solution(n):
answer = ''
list = ['4','1','2']
while(n>=1):
remain = n%3
n = n//3
if(remain==0):
n = n-1
answer = list[remain] + answer
return answer
|
cs |
: 간단한 설명
1. 입력된 수의 나머지를 설정( remain == n%3)
2. 입력된 수를 몫으로 설정( n = n//3)
3. 만약 나머지가 0일 경우 몫에서 -1 진행
4. 각 나머지에 맞게끔 list에 1,2,4를 배치
5. answer 반환
4) 정리 노트
: 노트에 연필로 풀어나가면서 규칙 확인이 중요
'*Algorithm > Programmers_Level2' 카테고리의 다른 글
[programmers] 프로그래머스 Level2 다음 큰 숫자(파이썬 Python) (0) | 2020.11.18 |
---|---|
[programmers] 프로그래머스 Level2 피보나치 수(파이썬 Python) (0) | 2020.11.17 |
[programmers] 프로그래머스 Level2 올바른 괄호(파이썬 Python) (0) | 2020.11.16 |
[programmers] 프로그래머스 Level2 N개의 최소공배수(파이썬 Python) (0) | 2020.11.09 |
[programmers] 프로그래머스 Level2 최솟값 만들기(파이썬 Python) (0) | 2020.11.09 |
댓글