개발 모음집/Programmers

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

wonos 2022. 5. 4. 17:03
 

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

 

programmers.co.kr

다른사람 풀이 (성공)

def solution(n):
	answer = ''
	n_array = ["1", "2", "4"]	

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

하나의 배열을 만들어 줍니다.n_array=["1","2","4"] 를 만들어서 계속 뺑뺑이 돌려줍니다.

숫자 n에서 n%3을 했을 때, 0,1,2가 나오게 됩니다.

<출력물>0이 나오면 11이 나오면 23이 나오면 4

이렇게 출력이 되도록 합니다.n-1을 하고, n%3을 해서 배열결과물을 출력합니다.

n=1이면, n-1(1-1=0)을 해서 n%3(0%3=0)을 해서 1 출력n=2이면, n-1(2-1=1)을 해서 n%3(1%3=1)을 해서 2 출력n=3이면, n-1(3-1=2)을 해서 n%3(2%3=2)을 해서 4 출력n=4이면, n-1(4-1=3)을 해서 n%3(3%3=0)을 해서 1 출력근데, 여기서 n=4는 11로 나와야 하잖아요!

흠...3인 경우에는 n//3을 해서 1로 만들어주고 다시 n-1해서 0으로 되게끔 하면 되겠네요!그 부분을 출력물과 더해주면 11이 되네요!

즉, 0//3, 1//3, 2//3은 다 0이 되서 돌아가지 않지만,3//3부터는 1이 되니깐 두자리를 채워줄 수 있어요!!

n=4부터 다시 정리할게요!

  • n=4
    • n-1(4-1=3)을 해서 n%3(3%3=0)을 해서 1 출력
    • n//3(3//3=1)을 해서 n-1(1-1=0)을 해서 1출력 => '1'+'1'
  • n=5
    • n-1(5-1=4)을 해서 n%3(4%3=1)을 해서 2 출력
    • n//3(4//3=1)을 해서 n-1(1-1=0)을 해서 1출력 => '2'+'1'
  • n=6
    • n-1(6-1=5)을 해서 n%3(5%3=2)을 해서 4 출력
    • n//3(5//3=1)을 해서 n-1(1-1=0)을 해서 1출력 => '4'+'1'
  • n=7
    • n-1(7-1=6)을 해서 n%3(6%3=0)을 해서 1 출력
    • n//3(6//3=2)을 해서 n-1(2-1=1)을 해서 2출력 => '1'+'2'

이런식으로 결과물을 도출할 수 있습니다. 출력된 결과물 두개를 반대로 뒤집어야 겠네요!첫번째 줄에서 나온 결과물을 뒤로 보낼 수 있도록 코드를 만들어 봅시닷!!!

다른사람 풀이2 (성공)

def solution(n):
    answer = ''
    while n:
        if n % 3:
            answer += str(n % 3)
            n //= 3
        else:
            answer += "4"
            n = n//3 - 1
    return answer[::-1]