개발일기

백준 1864번 파이썬 풀이 : 문어 숫자 본문

알고리즘 문제풀이/백준

백준 1864번 파이썬 풀이 : 문어 숫자

한민기 2021. 9. 22. 17:29
반응형

문제 링크 : https://www.acmicpc.net/problem/1864

 

1864번: 문어 숫자

해류가 매우 느리고 바닥을 기어다니는 생물이 적은 바다 밑바닥에서만 발견되는 잔물결 무늬의 정체는 오랫동안 해양학자들에게 수수께끼였다. 하지만 최근의 연구 성과는 동물 언어학 분야

www.acmicpc.net

문제

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

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

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

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

입력

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

출력

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

# 문제 풀이 ( 알고리즘 분류 : 수학, 구현, 사칙연산 )

이번 문제는 단순 수학 계산과 구현 문제 였기 때문에 쉬운 축에 속하지만

추석이기도 하고 느낌을 잃지 않기 위해 풀어 보았다.

 

기호와 대응하는 숫자를 표현할 때 두가지 방법을 사용할 수 있다.

딕셔너리를 사용하여 key value를 사용해도 되고 배열에 모든 문자를 전부 넣고 index - 1 로 하여 사용하면 된다.

 

1
2
3
4
5
6
while True:
    string = input()
    string_len = len(string)
    answer = 0
    if string == "#":
        break
cs

string 변수로 문자열을 입력 받으며 입력받은 문자열이 # 이면 break를 통해 반복문을 탈출 프로그램을 종료한다.

 

1
2
3
    for i in string:
        answer += (string_dict.index(i) - 1* (8 ** (string_len - 1))
        string_len -= 1
cs

입력받은 문자열을 하나씩 꺼내어 배열.index를 사용 index 번호를 추출 하고 계산하여 answer에 더해준다.

 

 

 

반응형
Comments