© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 1864 - 문어 숫자

2025-07-15
BOJ
브론즈 II
python
원본 문제 보기
수학
구현
문자열
사칙연산

문제

BOJ 1864 - 문어 숫자

문어는 다리가 8개여서 8진법을 사용한다. 특수 기호로 표현된 문어 숫자를 10진수로 변환하라. /는 -1, -는 0, \는 1 등의 매핑이 주어진다.

입력

여러 줄에 문어 숫자가 주어지며, #이면 종료한다.

출력

각 문어 숫자의 10진수 값을 출력한다.

예제

입력출력
(@ -( #19 -2

풀이

각 기호를 대응하는 숫자(-1~7)로 변환한 뒤 8진법으로 10진수 값을 계산한다.

  1. 7개 특수 기호를 0~7 및 -1에 매핑하는 딕셔너리를 정의한다
  2. 문어 숫자의 각 자리를 매핑값으로 변환한다
  3. 각 자리에 8^(자릿수) 가중치를 곱하여 합산한다
  4. #이 입력되면 종료한다

핵심 아이디어: 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) — 상수 크기 매핑 딕셔너리