[백준]B2-1871

oxllz·2022년 3월 10일
0

백준-브론즈

목록 보기
57/65
post-thumbnail

문제

앨버타의 자동차 번호판은 ABC-0123 (세 글자, 네 숫자)와 같이 두 부분으로 나누어져 있다.

좋은 번호판은 첫 번째 부분의 가치와 두 번째 부분의 가치의 차이가 100을 넘지 않는 번호판이다.

글자로 이루어진 첫 번째 부분의 가치는 글자를 26진법 수처럼 계산한다. (각 자리가 [A..Z]) 예를 들어, "ABC"의 가치는 28 (0×262 + 1×261 + 2×260)이 된다. "ABC-0123"은 |28 - 123| ≤ 100 이기 때문에, 좋은 번호판이다.

자동차 번호판이 주어졌을 때, 좋은 번호판인지 아닌지를 구하는 프로그램을 작성하시오.


입력

첫째 줄에 번호판의 수 N (1 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 자동차 번호판이 LLL-DDDD 형식으로 주어진다.


출력

각각의 자동차 번호판에 대해서, 좋은 번호판이면 "nice"를, 아니면 "not nice"를 출력한다.


풀이

N = int(input())

for i in range(N):
    fir, sec = input().split('-')

    res = 0
    for j in range(len(fir)):
        res += (ord(fir[j])-65) * (26 ** (len(fir)-j-1))

    if abs(res-int(sec)) <= 100:
        print("nice")
    else:
        print("not nice")

(ord(fir[j])-65) : A-Z 를 0 ~ 25 로 변환시켜준다.
(26 ** (len(fir)-j-1) : 26진수로 표현해준다.
ex) ABC 일때 A는 0번째 인덱스를 가지고 있지만 26진수를 표현하기 위해서는 26226^2 를 곱해줘야 한다. 따라서 문자열 길이 - 인덱스 번호 - 1 을 해준다.

0개의 댓글