코딩테스트/Baekjoon

[백준] 1864:문어 숫자 - Python

지윤공원🌳 2021. 5. 24. 15:35
728x90

📖 문제 설명

해류가 매우 느리고 바닥을 기어다니는 생물이 적은 바다 밑바닥에서만 발견되는 잔물결 무늬의 정체는 오랫동안 해양학자들에게 수수께끼였다. 하지만 최근의 연구 성과는 동물 언어학 분야에 일대 혁명을 불러왔다. 이 무늬의 정체는 바로 문어가 숫자를 적는 방법이라는 것이 해양 생물학자들에 의해 밝혀진 것이다. 학자들은 문어가 무엇을 세는 것인지는 아직 알 수 없지만, 수 표기법을 해독하는 데에는 성공했다.

뭍 위에 사는 이들에게는 문어가 쓰는 숫자와 그를 표현하는 잔물결 무늬가 매우 낯설 수밖에 없다. 따라서 연구자들은 다음과 같은 기호로 잔물결 무늬를 적기로 합의했다. 각 기호와 대응하는 숫자는 다음과 같다.

  • -는 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이다.

당신에게 주어진 문제는 문어 숫자를 입력 받아 십진수로 나타내는 것이다.

 

✔️ 입력

한 줄에 하나씩 문어 숫자가 입력으로 주어진다. 각 숫자는 최소 한 개, 최대 여덟 개의 문어 숫자 기호로 이루어져있다. 입력으로 '#'이 들어오면 입력을 종료한다.

 

✔️ 출력

입력 받은 문어 숫자에 대응하는 십진수를 한 줄에 하나씩 출력한다.

 

💻 나의 코드

li = ["-", "\\", "(", "@", "?", ">", "&", "%"] # 문어가 쓰는 문자들(양수) 초기화
minus = '/' # 문어가 쓰는 문자(음수) 초기화
result = [] # 결과들을 담을 배열

while(True):
  s = input()
  if s[0] == '#': break # 입력값이 '#'이면 반복문 벗어남
  answer = 0

  for i in range(len(s)):
    num = 0
    if s[i] == minus: num = -1 # s[i]가 minus이면 num에 -1 초기화
    else: num = li.index(s[i]) # s[i]가 minus가 아니면 li에서 인덱스를 찾아 num에 인덱스를 값으로 초기화
    if i == (len(s) - 1): answer += num # i가 마지막 인덱스면 그대로 answer에 num더함
    else: answer += (num * pow(8, len(s) - i - 1)) # num과 8의 n제곱한 값을 곱한 것을 answer에 더함
  result.append(answer) # result에 연산한 answer 추가
  
print('\n'.join(map(str, result))) # 숫자형 배열을 str로 형변환 후 join()해서 출력

 

📜 채점 결과

100.0

 

💬 배운 것

  • 문제를 읽고 풀이 방법을 수도 코드로 쓴 후에 코드를 작성하면 오히려 수월하게 문제를 풀 수 있습니다. 
  • pow(a, b)를 통해 a를 b제곱한 값을 얻을 수 있습니다. 
  • map(자료형, 변수)를 통해 변수를 자료형 타입으로 변환할 수 있습니다. 
728x90