문제 링크 : https://www.acmicpc.net/problem/6568
1. 접근 방법
처음 문제를 읽고 잘 이해하지 못해 많이 당황했다.
이번 문제는 잘 읽고 이해하는 것부터 시작했다. 컴퓨터의 이론과도 연관 있는 것 같아, 관련한 내용을 공부하면 좋을 것 같다.
2. 해결 코드
- python 코드
import sys
input = sys.stdin.readline
while True:
try:
memory = [0] * 32
# 메모리에 먼저 저장
for i in range(32):
memory[i] = int(input().strip(), 2)
# 가산기, pc
adder = 0
pc = 0
while True:
cmd = memory[pc] // 32
num = memory[pc] % 32
pc = (pc + 1) % 32
# 각 명령어
# 메모리주소의 주소에 값 저장
if cmd == 0:
memory[num] = adder
# 메모리 주소의 값 가져오기
elif cmd == 1:
adder = memory[num]
# 가산기 값이 0이면 pc 바꾸기
elif cmd == 2:
if not adder:
pc = num
# 아무 행동 ㄴㄴ
elif cmd == 3:
continue
# 가산기 값 '1' 감소
elif cmd == 4:
adder = (adder - 1) % 256
# 가산기 값 '1' 증가
elif cmd == 5:
adder = (adder + 1) % 256
# pc값 변경
elif cmd == 6:
pc = num
# 프로그램 종료
elif cmd == 7:
break
print(bin(adder)[2:].zfill(8))
except:
break
- 풀이 과정
입력을 32줄 받으며 메모리에 저장을 하고, EOF면 종료한다. 따로 EOF만 선언하지 않아도 상관없어서 모든 예외에 종료하도록 했다.
처음 pc값과 가산기 값을 지정하고, pc가 가리키는 메모리의 값을 3비트, 5비트를 각각 나누어뒀다. 메모리를 받을 때, 10진수로 받았기 때문에 32로 나눈 나머지와 몫으로 그 값을 지정했다.
문제에 따라 진행 전 pc값을 1증가시키고, 나머지는 각 명령에 따라 진행했다.
3. 생각 정리
문제를 잘 읽는 것도 중요하지만, 그만큼 배경지식도 중요한 것 같다.
그리고 동시에 이런 경험이 하나둘 쌓여 더 실력이 늘어나는 것 같다.
'CS > 알고리즘 & 문제풀이' 카테고리의 다른 글
[Python] 백준 2572 보드게임 (0) | 2021.09.21 |
---|---|
[Python] 백준 12787 지금 밥이 문제냐 (0) | 2021.09.20 |
[Python] 백준 1338 알 수 없는 번호 (0) | 2021.09.18 |
[Python] 백준 5052 전화번호 목록 (0) | 2021.09.15 |
[Python] 백준 9655 돌 게임 (0) | 2021.09.12 |
댓글