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 |
---|
댓글