백준 2745 진법변환 파이썬

청수동햄주먹·2023년 7월 24일
0

파이썬코딩테스트

목록 보기
30/35

내코드

# STEP 1 recieve the input and split it by blank
N, B = input().split()


# STEP 2 string to list then reverse
N = list(N.strip())
N = N[::-1]

# STEP 3
B = int(B)
answer = 0

# STEP 4 if the value is numeric, multiply by B to the i-th power 
# else, convert the character into an assigned value then multiply by B^i
for i,x in enumerate(N):
  if x.isnumeric():
    answer += int(x) * (B ** i)
  else: 
    answer += (ord(x)-55) * (B ** i)
  
print(answer)

사전 지식

step 1

  • split()
    따로 " " 라고 해주지 않아도 공백으로 구분해 줌

step 2

  • list(string.strip())
    한 문자씩 떼네어서 리스트에 담아준다. 리스트 처리를 하지 않을 경우 양 끝의 공백을 제거한 string을 리턴해줌
  • list[::-1]
    순서를 거꾸로

    step 4

  • isnumeric()
    문자처리만 신경쓰다 숫자 처리를 까먹을뻔.0~9 까지의 경우와 그이후의 경우를 분리해서 처리해준다
    • isdigit()
    • int로 핸들링하는 경우 try... catch ValueError의 에러처리를 해줘야 한다
  • ord('A') A의 아스키코드 넘버 리턴
  • chr(65) 아스키코드 65번의 문자 리턴

배워야할 코드

N, B = input().split()
print(int(N, int(B)))
  • int( 'string', int )
    int()를 이렇게 쓸 수 있는지 첨알았다..!
    string을 B 진법으로 바꿔 줌.

    int('11', 2) # 3
    int('AA', 11) # 120
  
  
  
### 풀다보니..
- N이 B진수는 가질 수 없는 수를 가진 경우는 아예 제외 된 경우 인가봄
- 문자처리를 상당히 쉽게 내준 문제 인듯
profile
코딩과 사별까지

0개의 댓글