본문 바로가기
*Algorithm/Programmers_Level2

[programmers] 프로그래머스 Level2 124 나라의 숫자(파이썬 Python)

by codinguser 2020. 11. 12.

프로그래머스
(주)그렙

 

[programmers] 프로그래머스 Level2 124 나라의 숫자

(파이썬 Python)

 

* 문제출처 : 프로그래머스 코딩 테스트 연습, 알고리즘 문제

 

 

 

 

 

1) 문제


 

프로그래머스 124 나라의 숫자

 

코딩테스트 연습 - 124 나라의 숫자

 

programmers.co.kr

 

 

 

 

 

2) 풀이 과정


 

프로그래머스 124 나라의 숫자 파이썬
규칙 찾기 위한 과정

 

 

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) 정리 노트


 

: 노트에 연필로 풀어나가면서 규칙 확인이 중요

 

 

 

 

 

댓글