파이썬 알고리즘 178번 | [백준 11576번] Base Conversion

Yunny.Log ·2022년 6월 20일
0

Algorithm

목록 보기
181/318
post-thumbnail

178. Base Conversion

1) 어떤 전략(알고리즘)으로 해결?

2) 코딩 설명

<내 풀이>


from collections import deque
import sys

a,b = map(int, sys.stdin.readline().rstrip().split())

m = int(sys.stdin.readline().rstrip())
# a -> b

lis = list(map(int, sys.stdin.readline().rstrip().split()))

res = 0
for i in range(m) :
    # 1) 10으로 일단
    # 총 길이가 2면 1 0 순서니깐 m-i-1 (2-0-1) (2-1-1)
    res+= (a**(m-i-1))*(lis[i])
    # TypeError: int() can't convert non-string with explicit base
    
answ=deque()
while res :
    answ.appendleft(str(res%b))
    res//=b


for i in answ :
    print(i, end=" ")

  • 문자열이 아니라 리스트에 16 을 바로 저장하게 하고 출력하니 정답이 나왔다.

<내 틀렸던 풀이, 문제점>


import sys

a,b = map(int, sys.stdin.readline().rstrip().split())

m = int(sys.stdin.readline().rstrip())
# a -> b

lis = list(map(int, sys.stdin.readline().rstrip().split()))

res = 0
for i in range(m) :
    # 1) 10으로 일단
    # 총 길이가 2면 1 0 순서니깐 m-i-1 (2-0-1) (2-1-1)
    res+= (a**(m-i-1))*(lis[i])
    # TypeError: int() can't convert non-string with explicit base

answ = ""
while res :
    answ+=str(res%b)
    res//=b

answ = reversed(list(answ))

for i in answ :
    print(i, end=" ")

  • 많은 사례들을 테스트했을 때는 됐는데, 1퍼센트 대에서 바로 틀렸다고 뜬다. 반례가 무엇일까

https://thoughtprovo-king.tistory.com/13
아... 아아........너무 감사한 분

  • 위 블로그에서 제시해주신 반례
8 17
2 
6 2

=> 2 16
로 나와야 하는데
나는
이렇게 16이 쪼개져서 나오는 중 ^^

문자열로 저장하지 말고 리스트에 저장해놔야 겠다 숫자별루,,ㅠㅠ

<반성 점>

  • 진법 조심하자

<배운 점>

  • 추가적으로 n진법의 수를 10진법으로 변경할 때 int형은 안되고 문자열의 형태만 int 형으로 바꾸기가 가능하다구 한다.
  • 그때 나오는 에러
    TypeError: int() can't convert non-string with explicit base

0개의 댓글