본문 바로가기

코딩테스트 대비

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

 

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

 

programmers.co.kr

해당 문제는 규칙을 알면 풀 수 있는 문제라고 생각한다.

'질문하기' 보면 3진법 얘기가 있는데.... 저는 잘 모르겠습니다...🥰

 

나는 문제를 풀 때 규칙을 먼저 생각해보고

규칙을 찾을 때에는 테스트 케이스를 많이 써보고 관찰하고 찾아보는 식으로 한다.

 

내가 생각한 이 문제의 규칙은 아래와 같다. 

풀이 방법

first와 last를 정하고 그 범위 안에서 3 등분하고 다시 반복하고 해서 구간을 좁게 나누는 방법!

 

내가 생각한 코드는 이런 식이다! 물론 내가 Python문법도 익힌 지 얼마 안 됐고 코딩을 잘하지 못해서 불필요한 게 많긴 하다...😭

 

코드

def solution(n):
    first,last,standard=0,0,0
    number=""
    i,sum=1,3
    while True:#n이 속해있는 범위와 first last의 값을 얻기 위해 존재.
        if n<=sum:
            last=sum
            first=sum-3**i
            break
        i+=1    
        sum=sum+3**i
        
    while True:#범위안에서 3등분하고 반복
        standard=(last-first)/3 #범위를 좁혀나가기위해 존재.
        
        if first<n<=first+standard:#1번째 범위
            last=first+standard# first는 그대로 두고 Last 변경
            number=number+"1"
        elif first+standard<n<=last-standard:#2번째 범위
            first=first+standard#first 변경
            last=last-standard#Last 변경
            number=number+"2"
        elif last-standard<n<=last:#3번째 범위
            first=last-standard#Last는 그대로 두고 first 변경.
            number=number+"4"
        if int(standard)==1:#만약 standard 1이 된거면 끝까지 돈거니까 빠져나오기.
            break
            
    return number

실행결과

실행결과

 

앞으로 자주자주 올리면서 주석 다는 연습도 하고 어떤 식으로 풀었는지 리뷰하는 연습도 해야겠다...

물론 처음이라 리뷰도 잘못하겠고 내가 알고 있는 것을 설명하기가 어렵다...

 

하지만 익숙해지자!!!🥰