본문으로 바로가기

https://www.acmicpc.net/problem/6568

 

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

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

www.acmicpc.net

 

제목부터 정신을 혼미하게 만드는 문제이다.

우리 알고리즘 스터디의 파이썬 사용자가 이번 주에 풀자고 고른 문제인데, 아주 악랄하기 그지없다.

혼미한 제목과는 별개로 문제 자체는 굉장히 재미있었다.

 

막상 문제를 읽으면 잘 이해가 가지 않을 수도 있다. 나처럼 CS지식이 얕은 분을 위하여 조금 첨언하자면,

 

1. 자바의 경우, Integer.parseInt(number, 2) 로 2진수로 변환할 수 있다.

2. 이 문제에서 앞의 8비트 중 앞의 3비트만 남기는 것은 number >> 5 나, 2^5를 나누기 연산하는 것으로 구할 수 있다.

3. 같은 맥락으로, 값을 구하는 것 역시 2^5를 모듈러 연산하는 것으로 구할 수 있다.

4. 프로그램 카운터(PC)는 다음에 실행할 명령어의 메모리 주소값을 의미한다. 즉 PC가 4라면, 이번 명령은 메모리의 4번째 줄을 실행한다.

5. 00000000 에서 -1을 하면 11111111이 된다.

6. 11111111에서 1을 더하면 00000000이 된다.(10000000이지만, 9비트이므로 앞의 한자리가 잘려 8비트만 남는다)

 

이 요소들을 알고 있다면 쉽게 풀리는 시뮬레이션 문제이다.