PS/프로그래머스

3진법 뒤집기 (lv1)

ForteQook 2022. 7. 4. 12:36

 입력 n을 3진법으로 변환한 뒤, 거꾸로 뒤집어 다시 10진법으로 바꾸는 알고리즘 이다. 핵심은 거꾸로 뒤집는다는 것과, 다시 10진법으로 바꿔서 반환한다는 것이다. 처음에는 while문 안에서 리스트에 값을 넣어 순서를 뒤집은 다음 10진법으로 바꾸는 연산을 다시 for문을 돌려 진행하려고 했는데, 큐를 이용하여 순서를 뒤집는 과정을 건너 뛰었다.


파이썬에서 큐(queue) 자료 구조 사용하기 | Engineering Blog by Dale Seo

 

파이썬에서 큐(queue) 자료 구조 사용하기

Engineering Blog by Dale Seo

www.daleseo.com

 pop(0), insert(0) 을 이용해서 리스트로 직접 구현하는 방법, collections모듈의 deque를 사용하는 방법, 마지막으로 queue모듈의 Queue 클래스를 사용하는 방법이 있다.

 int()

[파이썬/Python] 진법 변환 함수 - int( ) - 몽구의 우당탕탕 개발 공부 (tistory.com)

 

[파이썬/Python] 진법 변환 함수 - int( )

프로그래머스 강의 <파이썬을 파이썬답게> 에서 숫자 num과 진법을 나타내는 base를 파라미터로 제공해줄 때, 10진법 숫자로 출력하라는 문제가 있었다. 나는 다음과 같은 코드로 짰다. num, base = map

mong9data.tistory.com

 새삼스레 웬 int 메서드인가 싶지만, 두번째 인자에 정수형 데이터를 넣어주면 해당 진법의 수를 10진법으로 변환해주는 기능이 있다는 사실을 알아내서 적어둔다. 첫번째 인자는 무조건 string 자료형이 와야한다고 한다.


코드

before

from collections import deque

def solution(n):
    answer = 0
    _n = n
    queue = deque([])
    while True:
        if _n < 3 :
            queue.appendleft(_n)
            break
        queue.appendleft(_n % 3)
        _n = _n // 3
    for i,v in enumerate(queue):
        answer += (3**i)*v
    return answer

after

def solution(n):
    tmp = ''
    while n:
        tmp += str(n % 3)
        n = n // 3

    answer = int(tmp, 3)
    return answer

 좋은 방법 같아서 가져왔다. 벤치마킹해야할 포인트는 총 두가지가 있다.

1. 반복문 조건

- n을 조건으로 넣어줘서 0이되면 반복문이 멈추게끔 해놨다. if break 도 물론 괜찮지만  더욱 깔끔하고 직관적이다.

2. str과 int 사용

- int 메서드를 사용하는 방법인데, 반복문에서 string에 덧셈연산을 하면 뒤에 붙는다는 점, for문을 돌리지 않을 것이기 때문에 내가 한 것처럼 앞에서부터 넣지 않아도 된다는 점, 그리고 int를 사용하면 10진법으로 바꿔준다는 점을 주목했다.

'PS > 프로그래머스' 카테고리의 다른 글

2016년 (lv1)  (0) 2022.07.04
약수의 개수와 덧셈 (lv1)  (0) 2022.07.04
실패율 (lv1)  (0) 2022.07.04
체육복 (lv1)  (0) 2022.07.03
모의고사 (lv1)  (0) 2022.07.03