[백준][Python] 1864. 문어 숫자
Bronze Ⅱ 🔗1864. 문어 숫자
📝문제 요약
문제 설명
해류가 매우 느리고 바닥을 기어다니는 생물이 적은 바다 밑바닥에서만 발견되는 잔물결 무늬의 정체는 오랫동안 해양학자들에게 수수께끼였다. 하지만 최근의 연구 성과는 동물 언어학 분야에 일대 혁명을 불러왔다. 이 무늬의 정체는 바로 문어가 숫자를 적는 방법이라는 것이 해양 생물학자들에 의해 밝혀진 것이다. 학자들은 문어가 무엇을 세는 것인지는 아직 알 수 없지만, 수 표기법을 해독하는 데에는 성공했다.
뭍 위에 사는 이들에게는 문어가 쓰는 숫자와 그를 표현하는 잔물결 무늬가 매우 낯설 수밖에 없다. 따라서 연구자들은 다음과 같은 기호로 잔물결 무늬를 적기로 합의했다. 각 기호와 대응하는 숫자는 다음과 같다.
~
는 0에 대응한다.\
는 1에 대응한다.(
는 2에 대응한다.@
는 3에 대응한다.?
는 4에 대응한다.>
는 5에 대응한다.&
는 6에 대응한다.%
는 7에 대응한다./
는 -1에 대응한다.
해양 신경학자들은 특히 음수를 나타내는 기호가 있다는 사실에 흥분하면서, 아직 걸음마 단계인 두족류 신경학이 이 발견을 계기로 크게 발전하기를 기대하고 있다.
당연히 문어의 수 체계는 8진법에 기반한다. 예를 들면 다음과 같다.
(@&는 2 × 82 + 3 × 8 + 6 = 158이다.
?/–는 4 × 83 + −1 × 82 + 0 × 8 + 0 = 1984이다.
/(\는 −1 × 82 + 2 × 8 + 1 = −47이다.
당신에게 주어진 문제는 문어 숫자를 입력 받아 십진수로 나타내는 것이다.
입력
한 줄에 하나씩 문어 숫자가 입력으로 주어진다. 각 숫자는 최소 한 개, 최대 여덟 개의 문어 숫자 기호로 이루어져있다. 입력으로 ‘#’이 들어오면 입력을 종료한다.
출력
입력 받은 문어 숫자에 대응하는 십진수를 한 줄에 하나씩 출력한다.
✏️문제 풀이
\
입력이 안되서 고민하다가 특수기호 사용법을 검색하였다.: \\
로 사용하면 됨!
- 딕셔너리를 이용해서 해보려고 했는데, 아무리 해도 정답 근처에도 못가서 고민하다가 하나하나 대조해가면서 8진수 값을 곱하여 문제 풀이
len(n) - 1 - i
를 통해 현재 문자의 8진법 자리값(가장 왼쪽부터 높은 자리)을 계산- 8의 거듭제곱을 사용해 자리값을 계산
while True: # 입력을 저장할 n 변수 선언 n = input() # result 초기화 result = 0 # 입력이 #이면 반복 종료 if n == '#': break # 각 자리값과 매핑 값으로 계산하여 8진법체계로 변환 for i in range(len(n)): if n[i] == "~": result += 8 ** (len(n) - 1 - i) * 0 elif n[i] == "\\": result += 8 ** (len(n) - 1 - i) * 1 elif n[i] == "(": result += 8 ** (len(n) - 1 - i) * 2 elif n[i] == "@": result += 8 ** (len(n) - 1 - i) * 3 elif n[i] == "?": result += 8 ** (len(n) - 1 - i) * 4 elif n[i] == ">": result += 8 ** (len(n) - 1 - i) * 5 elif n[i] == "&": result += 8 ** (len(n) - 1 - i) * 6 elif n[i] == "%": result += 8 ** (len(n) - 1 - i) * 7 elif n[i] == "/": result += 8 ** (len(n) - 1 - i) * -1 print(result)
💯제출 코드
while True:
n = input()
result = 0
if n == '#':
break
for i in range(len(n)):
if n[i] == "~":
result += 8 ** (len(n) - 1 - i) * 0
elif n[i] == "\\":
result += 8 ** (len(n) - 1 - i) * 1
elif n[i] == "(":
result += 8 ** (len(n) - 1 - i) * 2
elif n[i] == "@":
result += 8 ** (len(n) - 1 - i) * 3
elif n[i] == "?":
result += 8 ** (len(n) - 1 - i) * 4
elif n[i] == ">":
result += 8 ** (len(n) - 1 - i) * 5
elif n[i] == "&":
result += 8 ** (len(n) - 1 - i) * 6
elif n[i] == "%":
result += 8 ** (len(n) - 1 - i) * 7
elif n[i] == "/":
result += 8 ** (len(n) - 1 - i) * -1
print(result)
댓글남기기