본문 바로가기

TIL

240628-(P)(40) 3진법 뒤집기

 

처음에 n진법으로 바꾸는 방법이 생각이 안나 찾아봤는데

해당되는 숫자로 나누고 몫과 나머지로 하면 된다는것이 생각났음.

 

일단 파이참에서 돌려보기 위해 이것저것 작성해봄

 

number=125
n=3
answer=''
while number:
    answer=answer+str(number%n)    # 나머지 추가
    number=number//n        # 몫으로 변경

answer_list=list(answer)    #위와같은 작업을 하니까 애초에 역순으로 리스트가 만들어짐
answer_list.reverse()		#그래서 순서를 맞추기 위해 리버스를함
answer_end=''.join(answer_list)
print(answer_list)
print(answer_end)

 

근데 여기서 알아둬야 할것이, 문자열에서 reverse 하는 방법은 없다는것

 

그래서 문자열을 answer_list=list(answer)를 통해 리스트로 만들어 주었고

 answer_list.reverse() 를 통해 순서를 바꾼후

''.join(answer_list) 을 통해 다시 문자로 바꿔줌

 

근데 문제에서 보면 애초에 3진법상에서 앞뒤로 뒤집은 후라고 했으니 정작 문제풀때는 이 작업을 진행 하지 않아도됨

 

그리고 나는 n진법으로 바꾸는건줄 알았는데

애초에 3진법으로 고정되어 있고 숫자 n이 바뀌는것이었음

이를 반영하여 코드를 작성 한 결과

def solution(n):
    answer=''
    while n:
        answer=answer+str(n%3)    # 나머지 추가
        n=n//3        # 몫으로 변경

    answer_10=0
    for i in range(1,len(answer)+1):
        answer_10+=int(answer[-i])*(3**(i-1))

    return answer_10

 

여기서 헷갈렸던게 for 범위 지정하는거였는데 하나씩 일일쳐 가면서 확인하면서 함

이거 계속 다뤄봐야 감이 좀 올것 같음

 

 

꾸역꾸역 성공...