2023. 9. 7. 21:08ㆍ개인활동/코테
s = [*map(str, input())]
sec = 0
for i in s:
if i == 'A' or i == 'B' or i == 'C':
sec += 3
elif i == 'D' or i == 'E' or i == 'F':
sec += 4
elif i == 'G' or i == 'H' or i == 'I':
sec += 5
elif i == 'J' or i == 'K' or i == 'L':
sec += 6
elif i == 'M' or i == 'N' or i == 'O':
sec += 7
elif i == 'P' or i == 'Q' or i == 'R' or i == 'S':
sec += 8
elif i == 'T' or i == 'U' or i == 'V':
sec += 9
elif i == 'W' or i == 'X' or i == 'Y' or i == 'Z':
sec += 10
print(sec)
짧게 하고싶었는데...
도저히 머리가 안굴러간다.
궁금한 점이 생겼는데
if i == 'A' or i == 'B' or i == 'C':
에서 뒷 부분들은 i == 'A' or 'B' or 'C' 로 하면 제대로 연산이 안된다
왜그럴까?
숏코드는 좀 충격이다.
print(sum(min(5*ord(x)>>4,27)-17for x in input()))
일단 아스키코드를 사용하면 쉽게 풀 수 있는 문제인 것 같다.
위의 코드에서는 입력받은 값을 아스키코드로 변환하여 5를 곱하고 2로 세번 나눈 값을 반환하여 27과 비교했을 때 더 작은 값을 반환하고, 거기서 17을 빼주는 듯 하다. 그 값이 바로 다이얼을 돌리는 초가 되는 것 같다.
예를 들어서 확인해보자.
예를들어 입력된 값이 'W'라면 'W'의 아스키코드는 다음과 같다.
87*5 = 435, 435를 이진수로 바꾸고, 네번 오른쪽으로 비트를 이동시킨다
네번 오른쪽으로 비트를 이동시키면 000011011
이 값을 다시 10진수로 변환하면 27이 나온다
min(27, 27)의 결과는 27
27-17 = 10
따라서 'W'는 10초
1까지 돌리는데 2초부터 시작했으니 'W'가 10초가 나오는 것이 정답이다.
그렇다면 'D'를 한번 확인해보자. 'D'의 경우에는 4초가 나와야 한다는 점.
'D'의 아스키코드는 68
68 * 5 = 340, 340을 2진수로 바꾸면 다음과 같다
마찬가지로 오른쪽으로 비트를 이동시키면 000010101
다시 10진수로 변환하면 21이 나온다.
min(21, 27)의 결과는 21, 21 - 17은 4로 실제 정답과 같음을 확인할 수 있다.
이렇게 식을 세울 수 있다는 점이 굉장히 신기하다. 다양한 진수를 활용해 공식화하여 생각하는 것도 연습해야 할 것 같다.
'개인활동 > 코테' 카테고리의 다른 글
백준 2738번 : 행렬 덧셈 (0) | 2024.01.02 |
---|---|
백준 11718번: 그대로 출력하기 (0) | 2023.09.13 |
백준 2908번: 상수 (0) | 2023.09.06 |
백준 1152번: 단어의 개수 (0) | 2023.09.06 |
백준 2657번: 문자열 반복 (0) | 2023.09.05 |