[백준/파이썬] 13877번 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 13877번 문제
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
C, C++, Java와 같은 프로그래밍 언어에서는 사용자가 다양한 진법의 상수를 사용할 수 있도록 “접두 문자(Prefix characters)”라는 개념을 도입하고 있다.
8진법인 수를 표기하고 싶으면, “0(숫자 0)”을, 16진법은 “0x”를, 10진법은 아무런 표기를 하지 않아도 되는데, 이해를 돕기 위해 10진법 수 “4660”을 이 표기방법대로 8, 10, 16진법으로 표기한 예는 다음과 같다.
-
8진법(Octal): 011064
-
10진법(Decimal): 4660
-
16진법(Hexadecimal): 0x1234
만약 이런 표기 방법이 없었다면, 컴파일러는 저 숫자가 8진법인지, 10진법인지, 16진법인지 알 길이 없다. 0x1234에서 “0x”라는 접두 문자가 빠지면 사용자가 16진수로 표기했지만, 컴파일러는 이를 16진수가 아닌 8진수, 10진수로 인식할 수도 있다는 소리다.
이러한 오류가 발생했을 경우를 가정하여, 10진법으로 표현 가능한 숫자들로 구성된 문자열을 각각 8진수, 10진수, 16진수로 해석하는 프로그램을 작성하시오.
입력 요약
첫 번째 줄에는 테스트 케이스를 나타내는 자연수 T(1 ≤ T ≤ 10000)이 주어진다. 이후 아래 2 ~ T + 1번째 줄에는 테스트 데이터의 번호를 나타내는 정수 K와 10진수로 표현된 문자열이 주어진다. 문자열의 길이는 7보다 작거나 같고, 0으로 시작할 수 있다.
출력 요약
각각의 테스트 데이터마다 테스트 데이터의 번호 K와 8진법, 10진법, 16진법으로 나타낸 수를 공백으로 구분하여 출력한다. 만약 입력된 문자열이 8진수로 해석될 수 없는 경우에는 0을 출력한다.
코드
import sys;read=sys.stdin.readline
for T in range(int(read())):
k,n=input().split()
try:o=int(n,8)
except:o=0
print(k,o,int(n),int(n,16))
설명
핵심은 구현 관점에서 C, C++, Java와 같은 프로그래밍 언어에서는 사용자가 다양한 진법의 상수를 사용할 수 있도록 “접두 문자(Prefix characters)”라는 개념을 도입하고 있다. …를 만족하도록 로직을 구성하는 것입니다.
코드는 입력을 파싱한 뒤 조건 분기와 계산을 순서대로 수행하고, 문제에서 요구한 형식으로 결과를 출력합니다.
경계값과 예외 케이스도 함께 고려해 오답이 나기 쉬운 상황을 방지합니다.
댓글남기기