[Programmers] - 3진법 뒤집기

오동훈·2021년 3월 24일
0

Programmers

목록 보기
20/64
post-thumbnail

1. Problem 📃

https://programmers.co.kr/learn/courses/30/lessons/72410

다음 문제는, 입력된 정수를 3진법으로 변환한 후 앞뒤 반전을 한뒤 10진법으로 재차 변환하는 문제입니다.

2. Logic 👨‍🏫

1. 첫번째 코드 logic

  1. 입력된 정수 n이 3 미만일때는 나머지를 리스트에 추가
  2. 입력된 정수 n이 3 이상일 때 까지 계속 나누면서 나머지를 리스트에 추가
    (reverse 효과 발생)
  3. n이 3이하일 때는 몫을 리스트에 추가
  4. pow와 슬라이싱을 가지고 10진법으로 변환

3. Code 💻

1. 내가 푼 코드

def solution(n):
    answer = 0
    list1 = []
    if n < 3:
        list1.append(n)
    else:
        while (n >= 3):
            list1.append(int(n % 3))    
            if (n//3 < 3):
                list1.append(int(n // 3))
            n /= 3
    for i in range(len(list1)):
        answer += (pow(3, i) * list1[::-1][i])       
    return answer

2. 다른 사람이 푼 코드

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3
        print(tmp)
    answer = int(tmp, 3)
    print(answer)
    return answer

4. Feedback 📚

4.1 내가 푼 문제 Feedback

일단 n이 3이상일 때 까지 나눠 나머지를 대입하는 알고리즘을 구상해, 만약 n이 3이하라면 또 처리해줘야 하는 번거로움이 있었다. 이 방법 말고 0이상일 때 까지 나눠 나머지를 대입하는 알고리즘으로 구상해 표현하면 그 방법이 더 효율적일 것 같다.

def solution(n):
    answer = 0
    list1 = []
    while (n > 0):
        list1.append(int(n % 3))
        n = int(n // 3)
    for i in range(len(list1)):
        answer += (pow(3, i) * list1[::-1][i])        
    return answer

4.2 다른 사람 코드 Feedback

4.2.1 int - 다른 진수의 문자열로 숫자형으로 변환하기

  • bin(), oct(), hex()로 변환한 문자열들을 어떻게 다시 숫자로 변환할 수 있을까요? 평소에 문자열을 숫자로 바꾸기 위해서 자주 사용하시던 int() 함수에 진수의 base 값을 추가 인자로 넘겨주시면 됩니다.
>>> int('a',base=16) 
10 
>>> int('z',base=36)
35
  • 사실 int() 함수의 2번째 인자는 디폴트값이 10이기 때문에 생략했을 경우 10진수의 문자열이 숫자로 변환되는 것입니다.
>>> int('42', 10)
42
>>> int('42')
42
profile
삽질의 기록들🐥

0개의 댓글