출처 : 프로그래머스 코딩테스트 연습, https://programmers.co.kr/learn/courses/30/lessons/12899
코딩테스트 연습 - 124 나라의 숫자
programmers.co.kr
더보기
첫 번째 풀이 : 효율성 테스트3 실패
def solution(n):
answer = []
n = int(n)
while n >= 3:
rest = n % 3
if rest != 0:
answer.append(str(rest))
n //= 3
else:
answer.append('4')
n = n // 3 - 1
answer.append(str(n))
return str(int(''.join(reversed(answer))))
처음보자마자 한 생각은 n진법과 비슷한 규칙성이 있지 않을까? 라는 생각을 접근했다.
그리고
3진법과 유사하게 동작하되 3으로 나눈 나머지가 0이면 나머지로 4를 넣고 몫을 1 줄인채로 진행한다는 규칙
을 찾아내었다.
아마 효율성 테스트는 str, int 하는 과정에서 걸린 것 같아서 저 부분만 수정하면 통과할 듯
두 번째 풀이
def solution(n):
answer = []
#3진법을 기반으로
#나머지가 1이면 1
#나머지가 2이면 2
#나머지가 0이면 몫 - 1 나머지 4
n = int(n)
while n >= 3:
rest = n % 3
if rest != 0:
answer.append(str(rest))
n //= 3
else:
answer.append('4')
n = n // 3 - 1
if n > 0:
answer.append(str(n))
return ''.join(reversed(answer))
str하고 int 해준 것은 n=0으로 처음에 들어갈 때를 처리해준 것인데
함수를 안쓰니까 통과했다.
시간 복잡도
-
다른 사람의 풀이를 보면서 알게 된 점
divmod 함수
p, r = divmod(n, d)
divmod는 몫과 나머지를 같이 return해준다.
고찰
고득점 Kit을 끝내고 LV2 문제를 본격적으로 풀기 시작했는데 무섭다...
규칙은 감을 잡고 한눈에 보이지 않으면 진짜 답도 없는 경우라서 걱정된다.
'알고리즘 > Python' 카테고리의 다른 글
[python] 프로그래머스 - 거리두기 확인하기 (0) | 2022.02.26 |
---|---|
[python] 프로그래머스 - 게임 맵 최단 거리 (0) | 2022.02.26 |
[python] 프로그래머스 - 타겟 넘버 (0) | 2022.02.21 |
[python] 프로그래머스 - 가장 큰 수 (0) | 2022.02.20 |
[python] 프로그래머스 - 소수 찾기 (0) | 2022.02.20 |