본문 바로가기
python/coding test

[프로그래머스] 124나라의 숫자 - 파이썬

by hello_world.cpp 2022. 2. 12.
728x90
반응형

 


문제

코딩테스트 연습 - 124 나라의 숫자 | 프로그래머스 (programmers.co.kr)

level 2에 있는 문제이다.

 

 

 


내 코드

def solution(n):
    x=n-1
    answer=''
    while True:
        x,y=divmod(x,3)
        if y==0:
            answer+='1'
        elif y==1:
            answer+='2'
        else:
            answer+='4'
        if x==0:
            break
        x=x-1
    return answer[::-1]

반복해서 3으로 나누면서 나머지를 0,1,2 각 경우에 따라 answer에 1,2,4를 추가한다. 몫이 0이되면 반복을 멈춘다.
마지막으로 문자열 answer를 reverse해주는 코드이다!

 

 

 

이때까지 코테를 많이 안풀어봐서 일단 하나하나 직접 적어보며 문제 이해부터 했다.

자연수를 순서대로 n-1하고 그 n-1한 숫자를 3으로 나누었을때 몫과 나머지를 계산해보았다.

 

입력으로 들어온 n을 n-1한 후 몫이 0이 될때까지 3으로 반복해서 나누고 나머지가 0일때 1 , 1일때 2 , 2일때 4를 answer에 추가한다는 걸 알 수 있었다.

 

 

 

오예! 성공 

 

 


다른 풀이

def change124(n):
    num = ['1','2','4']
    answer = ""


    while n > 0:
        n -= 1
        answer = num[n % 3] + answer
        n //= 3

    return answer

프로그래머스는 내 코드 제출하고 다른사람들 코드 보면 정말 존경스러운 기분이 든다..

굳이 if문을 쓰지 않고도 이렇게 끝내는 코드가 있었다..

위에서 설명했듯이 3으로 나눴을 때 나머지가

0일때 -> 1

1일때 -> 2

2일때 -> 4

인데

나머지 0,1,2 를 index로 활용한 코드다

 

 

그리고 //= 이렇게 생긴 연산자는 한번도 써본적이 없어서 간단하게 연습해보았다

for n in range(1,10):
    n//=3
    print(n)

1부터 9까지 숫자를 3으로 나눈 몫 반환하는 코드이다

 

 

728x90
반응형

'python > coding test' 카테고리의 다른 글

[프로그래머스] 두개 뽑아서 더하기 - 파이썬  (0) 2022.02.12

댓글