[Python] 백준 6568 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다

2021. 9. 19. 14:41·CS/알고리즘 & 문제풀이

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

 

6568번: 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다

그래서 여러분도 크리스마스날 심심해서 컴퓨터를 하나 만들었다. 이 컴퓨터는 아주 적은 수의 명령어를 사용하는 하나의 프로세서, 32바이트 메모리, 8비트짜리 가산기, 5비트짜리 프로그램 카

www.acmicpc.net

 

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
'CS/알고리즘 & 문제풀이' 카테고리의 다른 글
  • [Python] 백준 2572 보드게임
  • [Python] 백준 12787 지금 밥이 문제냐
  • [Python] 백준 1338 알 수 없는 번호
  • [Python] 백준 5052 전화번호 목록
mintropy
mintropy
민트로피의 하루하루 오늘보다 더 나은 내일
  • mintropy
    민트로피의 민트초코
    mintropy
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 생각 정리
        • 코딩테스트
        • SSAFY
      • 디지털 노트
        • Obsidian.md
        • Notion
      • CS
        • 알고리즘 & 문제풀이
        • AI
        • DB
        • 디자인패턴
      • Projects
      • Python
        • Python Web Framework
      • JavaScript
        • React.js
      • Docker
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Combinatorics
    SSAFY
    DRF
    백준
    브루트포스
    파이썬
    DP
    trie
    그리디
    코딩테스트
    union-find
    django
    프로젝트
    회고
    dfs
    조건분기
    카카오
    fastapi
    project_zero
    bfs
    pydantic
    프로그래머스
    구현
    markdown
    Python
    ps
    게임이론
    line
    web framework
    알고리즘
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
mintropy
[Python] 백준 6568 귀도 반 로썸은 크리스마스날 심심하다고 파이썬을 만들었다
상단으로

티스토리툴바