[파이썬 코딩테스트] 3진법 뒤집기

ch.2·2024년 7월 12일
0

코딩 테스트

목록 보기
10/21
post-thumbnail

문제

프로그래머스 연습 문제

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

3진법 수 표현: 몫이 0이 될 때까지 숫자를 3으로 나누고 나머지를 정렬한다.

e.g.) 45를 3진법 한 수: 1200

나의 답안

def solution(n):
    n3 = ''
    while n > 0 :
        n3 += str(n % 3)
        n //= 3 
        
    n10 = int(n3, 3)
    return n10
  • n3 = ''
    : 3진법으로 표현한 n을 저장할 변수를 만든다. 진법을 바꾸는 과정에서는 숫자들의 순서가 중요하다. 0을 숫자로 인식해 0 값이 사라지는 것을 방지하기 위해 문자열로 만든다.

  • while n > 0 :
    : n이 0이 될 때까지 반복한다.
    이 상황에서는 while n 이나 while n != 0 으로도 표현할 수 있다.

  • n3 += str(n % 3)
    : n을 3진법으로 표현하기 위한 과정. n을 3으로 나눈 나머지를 n3에 추가한다. 이 과정에서 결과값이 숫자이기 때문에 str()을 이용하여 문자열로 변환 후 넣어준다.
    계산되는 값이 뒤에 누적해서 추가되므로 n을 3으로 나눈 나머지 값이 순서대로 저장된다.

    n3 += str(n % 3)과 n3 = str(n % 3) + n3의 차이

    e.g.) n = 45
    n3 += str(n % 3) 은 str(n % 3)을 뒤에 추가하는 방식.
    → '0021'
    n3 += str(n % 3) 🟰 n3 = n3 + str(n % 3)

    n3 = str(n % 3) + n3 은 str(n % 3)을 앞에 추가하는 방식.
    → '1200'

  • n //= 3
    : n을 3으로 나눈 몫을 다시 n에 할당한다.
    n // = 3 이라고 표현하면 신택스 오류 발생!
    연산자 사이에는 띄어쓰기를 하면 안 된다.

  • n10 = int(n3, 3)
    : 3진수 문자열을 10진수 정수로 변환하여 n10 변수에 담는다.
    int 함수는 문자열/실수를 정수형으로 바꿔주는 기능만 하는 줄 알았는데 다른 진법의 숫자를 10진수로 바꿔줄 때도 사용한다!!
    int(string, base)
    : 각 base 진법을 10진법으로 바꿔준다.

다른 사람의 답안

def solution(n):
    answer = 0
    cnt = 1
    a = ''
    while n>0:
        a+=str(n%3)
        n = n//3
    print(a)
    for b in range(len(a),0,-1):
        answer += (int(a[b-1])*cnt)
        cnt *= 3
    return answer
  • n10 = int(n3, 3) 부분을 for 문으로 표현했다.

  • for b in range(len(a),0,-1)::
    : 코드 내에서 a는 n을 3진수로 표현한 값이다.
    a의 길이를 범위로 하여 역순으로 조회한다. 변수 b를 이용해 a의 마지막 숫자부터 첫 번째 숫자까지 순서대로 조회한다.

  • answer += (int(a[b-1])*cnt)
    : 3진수 n값이 문자열이므로 인덱싱을 할 수 있다.
    int(a[b-1]) 부분으로 조회 중인 자리의 문자열 숫자를 정수형으로 바꾼다.

  • cnt *= 3
    : 10진수 숫자의 3진수 값은 숫자를 3으로 나누어서 계산하는 것이므로, 3진수 숫자를 10진수 값을 구하기 위하여 3을 곱한다.

profile
데이터 분석 공부중

0개의 댓글