문제
문어는 다리가 8개여서 8진법을 사용한다. 특수 기호로 표현된 문어 숫자를 10진수로 변환하라. /는 -1, -는 0, \는 1 등의 매핑이 주어진다.
입력
여러 줄에 문어 숫자가 주어지며, #이면 종료한다.
출력
각 문어 숫자의 10진수 값을 출력한다.
예제
| 입력 | 출력 |
|---|---|
(@ -( # | 19 -2 |
풀이
각 기호를 대응하는 숫자(-1~7)로 변환한 뒤 8진법으로 10진수 값을 계산한다.
- 7개 특수 기호를 0~7 및 -1에 매핑하는 딕셔너리를 정의한다
- 문어 숫자의 각 자리를 매핑값으로 변환한다
- 각 자리에
8^(자릿수)가중치를 곱하여 합산한다 #이 입력되면 종료한다
핵심 아이디어: 8진법 변환 공식 sum(digit * 8^i)을 적용하되, / 기호가 -1을 나타내므로 음수 값도 처리된다.
코드
if __name__ == "__main__":
wave = {"-": 0, "\\": 1, "(": 2, "@": 3, "?": 4, ">": 5, "&": 6, "%": 7, "/": -1}
while True:
n = input()
if n == "#":
break
result = 0
for i in range(len(n)):
result += wave[n[i]] * 8 ** (len(n) - i - 1)
print(result)복잡도
- 시간: O(L) — L은 문어 숫자의 길이
- 공간: O(1) — 상수 크기 매핑 딕셔너리