BOJ 28086 | 미소녀 컴퓨터 파루빗토 쨩

전승민·2023년 5월 29일
0

BOJ 기록

목록 보기
65/68

아니 이게 참... 제목이... 파루빗토가 8비트라고 합니다. 알고 싶지 않았습니다.
원래는 제목 때문에 올리기는 싫었는데 이걸 어렵게 푸시는 분들이 많아서 올려봤습니다.

문제로 주어진 수식이 8진수 사칙연산이고, 그걸 10진수로 변환해서 더하고, 다시 8진수로 변환합니다.

Python으로 하면 이 과정이 참 편합니다.

이 문제가 뭐같은 이유는 다음 반례들 때문입니다.
-24+24
65/-16
-61*-11

그렇습니다. 마이너스 때문에 -는 가장 처음, 진짜 연산자 다음에도 들어올 수 있습니다.
근데 잘 생각해보면, 진짜 연산자는 숫자 다음에 위치해 있습니다. 그리고 부호 때문에 씌워진 -는 숫자 다음에 위치할 수가 없습니다.

그래서 입력받은 문자열을 순회하면서 숫자 다음에 존재하는 연산자가 발견되면 그 연산자를 기준으로 substring을 통해 A와 B를 추출합니다.

이후 추출한 A와 B는 eval 연산으로 진짜 연산자와 연산을 수행해 주고, oct()로 8진수 변환 후 파이썬에서 8진법을 나타내는 수식어인 '0o'를 제거하고 출력해주면 됩니다.

다만 0으로 나누는 수식은 사전에 차단해서 대참사를 방지합시다.

EZ한데 왜 실버인지 모르겠습니다. 제 기준에서는 브론즈 I이 적당한 것 같습니다.

코드

import math
K = input()

prev = ''
A, B = 0, 0
op = ''
for i in range(len(K)):
    if (prev.isdigit() and not K[i].isdigit()):
        op = K[i]
        A = int(K[:i], 8)
        B = int(K[i+1:], 8)
    prev = K[i]

if (op == '/' and B == 0):
    print('invalid')
    exit(0)
    
rst = oct(math.floor((eval(str(A)+op+str(B)))))
if rst[0] == '-':
    print('-' + rst[3:])
else:
    print(rst[2:])
profile
알고리즘 공부한거 끄적이는 곳

0개의 댓글