https://www.acmicpc.net/problem/2745
2745번: 진법 변환
B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를
www.acmicpc.net
요즘 파이썬을 공부하면서 백준 문제를 천천히 풀어나가고 있습니다.
먼저 문제를 이해해보도록 하겠습니다.
보시는 것처럼 예제로 이해해보면
첫번째 Z : 35 X 36의 4제곱 = 58,786,560
두번째 Z : 35 X 36의 3제곱 = 1,632,960
세번째 Z : 35 X 36의 2제곱 = 45,360
네번째 Z : 35 X 36의 1제곱 = 1,260
마지막 Z : 35 X 36의 0제곱, 즉 1이 곱해져서 36 입니다.
이 모든 숫자를 더하면?
58,786,560 + 1,632,960 + 45,360 + 1,260 + 36 = 60,466,176
예제 출력에 나와있는 수가 출력이 되는 것을 알 수 있습니다.
규칙성이 보이시나요?
그래서 저는 N 값을 딕셔너리화 시켜서 문제를 해결했습니다!
이 문제를 보자마자 어떻게 풀까 고민하다가 코랩에서 이렇게 풀었습니다!
# 첫번째 문제 풀이 (백준 사이트에서는 런타임에러(KeyError) 발생)
N, B = input().split() # 두 값 받기
B = int(B) # 정수형 변환
n = len(N) # N의 길이를 변수 n에 저장
list_N=list(N) # N을 리스트로 만듦
#각 알파벳을 대입할 딕셔너리 생성 (알파벳이 key, 숫자가 value)
dic = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':18,'J':19,'K':20,'L':21,'M':22,'N':23,'O':24, 'P':25,'Q':26,'R':27,"S":28,'T':29,'U':30,'V':31,'W':32,'X':33,'Y':34,'Z':35}
sum = 0 # 합계를 계산할 변수 sum
for i in list_N: # 리스트로 만든 N으로 반복
sum += int(dic[i]) * (B**(n-1)) # sum에 각 알파벳의 key 값에 B진법 계산
n -= 1 # n 값을 1씩 빼줌
print(sum) # 합계 출력
코랩에서는 분명 맞았단 말이죠? 정답이었습니다!
당연하죠! 틀리지 않았으니까요?
그.런.데
틀렸다고 나오더라고요?
띠용 했어요... 뭐지? 코드 안틀렸는데?
그런데 찾아보니... 단 두 줄로 끝나는 거더라고요????
# 두번째 문제 풀이 (백준에서 정답 처리됨)
n, b = input().split()
print(int(n,int(b)))
어이가 없어서...
파이썬은 int 함수를 이용해서 n진법을 10진법으로 변환할 수 있다고 해요.
int(변환할 문자열, int(n진법)) 이렇게 쓰면 된다고 합니다.... n진법은 int형으로 써주기!
이럴 수가... 좀 약간 억울..?
저는 A 값에 10이 저장되어 있고 이런 것을 몰랐었습니다..
(사실 코드 짜면서 이게 맞나..? 하는 의문이 들긴 했습니다.. 딕셔너리 만들 때요...
이렇게 하나하나 알파벳을 입력해서 값을 넣어야하나 고민했습니다...)
좀 황당하더라고요..흐엉 (일일히 쓴 나는 뭔가...)
이렇게 배워가는 거겠죠ㅠ_ㅠ
이상으로 백준 2745번 2가지 문제 풀이 였습니다!
'코딩(Coding) > 텍스트 코딩(Text Coding)' 카테고리의 다른 글
(파이썬)백준 2960번 : 에라토스테네스의 체(Python) 문제 풀이 (쉬운 풀이!) (0) | 2023.07.17 |
---|