코딩테스트/프로그래머스

[프로그래머스] [Level 1] 3진법 뒤집기

박소민 2022. 3. 17. 15:29
문제) 3진법 뒤집기
 

코딩테스트 연습 - 3진법 뒤집기

자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 n은 1 이상 100,000,000 이하인 자연수

programmers.co.kr

 

  • 내 풀이
  • 1트
    • 숫자 리스트 문자열로 합치기: ''.join(map(str, 숫자 리스트)) 
    • N진수 → 10진수 변환: int( 문자열, N)
    • 테스트 3, 7: 런타임 에러
def solution(n):
    answer=[]
    while n>3:
        answer.append(n%3)
        n//=3
    answer.append(n) #뒤집어진 순서로 들어감
    answer = ''.join(map(str,answer)) #숫자 리스트 문자열로 합치기
    answer=int(answer,3) #10진수로 변환
    return answer

 

  • 2트
    • while n>3 으로 하면
    • int를 사용해서 10진수로 변환하는 경우 answer에 3이 포함되어 있기 때문에 런타임 에러가 발생
    • → while n>=3 으로 변경
def solution(n):
    answer=[]
    while n>=3:
        answer.append(n%3)
        n//=3
    answer.append(n) #뒤집어진 순서로 들어감
    answer = ''.join(map(str,answer)) #숫자 리스트 문자열로 합치기
    answer=int(answer,3) #10진수로 변환
    return answer
print(solution(45))
print(solution(125))
#결과
7
229

 

  • 다른 사람 풀이
    • 리스트에 넣지 않고 바로 문자열에 넣기 : + 사용
    • n>0인 경우 : 마지막 나머지 값까지 while문 내에서 들어가기 때문에 따로 작성해줄 필요 X
def solution(n):
    answer=''
    while n:
        answer+=str(n%3)
        n//=3
        
    answer=int(answer,3)
    return answer