|
| 1 | +--- |
| 2 | +title: 🐢 🔄 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다 |
| 3 | +author: gani0325 |
| 4 | +date: 2023-12-24 02:00:00 +09:00 |
| 5 | +categories: [알고리즘, 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다] |
| 6 | +tags: [알고리즘, 백준, 골드5, 구현, 10주차, 이가은] |
| 7 | +render_with_liquid: false |
| 8 | +math: true |
| 9 | +--- |
| 10 | + |
| 11 | +## 1. 문제 링크 |
| 12 | + |
| 13 | +[6568번: 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다](https://www.acmicpc.net/problem/6568) |
| 14 | + |
| 15 | +<br>ㅇㅇㅇㅇㅇㅇㅇㅇ |
| 16 | + |
| 17 | +## 2. 코드 |
| 18 | + |
| 19 | + |
| 20 | +```python |
| 21 | + |
| 22 | +""" |
| 23 | +[6568] 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다 |
| 24 | +
|
| 25 | +💛 문제 |
| 26 | +그래서 여러분도 크리스마스날 심심해서 컴퓨터를 하나 만들었다. |
| 27 | +이 컴퓨터는 아주 적은 수의 명령어를 사용하는 하나의 프로세서, |
| 28 | +32바이트 메모리, 8비트짜리 가산기, 5비트짜리 프로그램 카운터(pc)로 이루어져 있다. |
| 29 | +
|
| 30 | +폰 노이만 구조를 표방하여 이 컴퓨터는 메모리와 프로그램 구문을 공유한다. |
| 31 | +프로그램 카운터는 다음에 실행되어야 하는 명령어의 주소를 갖고 있다. |
| 32 | +각 명령어의 길이는 1바이트이며, 상위 3비트는 명령어의 종류를, 하위 5비트는 피연산자를 표현한다. |
| 33 | +피연산자는 언제나 메모리 값(XXXXX)이다. 피연산자가 필요하지 않은 명령어도 있는데, 이때는 하위 5비트는 무의미하다(-----). |
| 34 | +사용되는 명령어들의 의미는 다음과 같다. |
| 35 | +
|
| 36 | +000xxxxx STA x 메모리 주소 x에 가산기의 값을 저장한다. |
| 37 | +001xxxxx LDA x 메모리 주소 x의 값을 가산기로 불러온다. |
| 38 | +010xxxxx BEQ x 가산기의 값이 0이면 PC 값을 x로 바꾼다. |
| 39 | +011----- NOP 아무 연산도 하지 않는다. |
| 40 | +100----- DEC 가산기 값을 1 감소시킨다. |
| 41 | +101----- INC 가산기 값을 1 증가시킨다. |
| 42 | +110xxxxx JMP x PC 값을 x로 바꾼다. |
| 43 | +111----- HLT 프로그램을 종료한다. |
| 44 | +
|
| 45 | +초기엔 PC와 가산기 값은 모두 0이다. 명령어를 불러와 해독한 뒤, 그 명령어를 실행하기 전에 PC 값은 1 증가한다. |
| 46 | +프로그램은 언제나 종료된다고 가정해도 좋다. |
| 47 | +
|
| 48 | +💚 입력 |
| 49 | +입력은 여러 개의 테스트 케이스로 주어진다. 각 테스트 케이스는 32개의 줄에 걸쳐 각 메모리 값, 즉 코드가 순서대로 8비트 2진수의 형태로 주어진다. |
| 50 | +왼쪽에 있는 비트일수록 상위 비트이다. 입력은 EOF와 함께 종료된다. |
| 51 | +
|
| 52 | +💙 출력 |
| 53 | +각 테스트 케이스마다 한 줄에 걸쳐 프로그램이 종료되었을 때의 가산기 값을 역시 8비트 2진수 형태로 출력한다. |
| 54 | +이때도 왼쪽에 출력될수록 상위 비트이다. |
| 55 | +""" |
| 56 | + |
| 57 | +table = [int(input().splite()) for _ in range(32)] |
| 58 | + |
| 59 | +# pc와 가산기 모두 0 |
| 60 | +pc, add = 0 |
| 61 | + |
| 62 | +while True: |
| 63 | + |
| 64 | + cmd, x = table[pc], 32 |
| 65 | + pc = (pc + 1) % 32 |
| 66 | + |
| 67 | + if cmd == 0: |
| 68 | + table[x] = a |
| 69 | + elif cmd == 1: |
| 70 | + a = table[x] |
| 71 | + elif cmd == 2: |
| 72 | + if not a: |
| 73 | + continue |
| 74 | + |
| 75 | +print(cmd) |
| 76 | +``` |
| 77 | + |
| 78 | +<br> |
| 79 | + |
0 commit comments