PC/UVa ID : 110106/10033

개요
어떤 컴퓨터에 열 개의 레지스터와 1,000워드 분량의 램이 있다. 각 레지스터 또는 램 위치에는 0 이상 999이하의 세 자리 정수가 저장된다. 명령어는 세자리 정수로 인코딩되며 램에 저장된다. 인코딩은 다음과 같다.

100 : 종료
2dn : d 레지스터를 n으로 설정(0 이상 9 이하)
3dn : d 레지스터를 n 더함
4dn : d 레지스터를 n 곱함
5ds : d 레지스터를 s 레지스터의 값으로 설정
6ds : s 레지스터의 값을 d 레지스터에 더함
7ds : d 레지스터에 s 레지스터의 값을 곱함
8da : d 레지스터를 a 레지스터에 저장된 주소의 램에 들어 있는 값으로  설정
9sa : a 레지스터에 저장된 주소의 램에 s 레지스터의 값을 대입
0ds : s 레지스터에 0이 들어있지 않으면 d 레지스터에 있는 위치로 이동

모든 레지스터의 초기값은 000 이다. 램에 저장되는 초기 값은 표준 입력으로부터 들어 온다. 처음으로 실행될 명령은 주소가 0인 램에 들어 있다. 모든 결과는 값이 1,000이 넘어가면 1,000으로 나눈 나머지로 줄어든다.



입력

입력은 입력 케이스의 개수를 나타내는 양의 정수 한 개가 들어있는 줄로 시작되며 그 줄에는 그 숫자밖에 입력되지 않는다. 그 뒤에는 빈 줄이 하나 들어가고 서로 다른 입력 케이스 사이에는 빈 줄 두 개가 입력 된다. 각 입력 케이스는 최대 1,000개의 부호가 없는 세 자리 정수로 구성되며 그 숫자들은 0부터 시작하는 연속된 램 위치에 저장되는 내용을 나타낸다. 값이 지정되지 않는 램 위치는 000으로 초기화된다.



출력

각 테스트 케이스마다 하나씩의 정수를 출력한다. 출력되는 정수는 종료 명령어에 이르기까지(종료 명령어 포함) 실행된 며령어의 개수다. 프로그램이 종료된다고 미리 가정해도 된다. 케이스가 여러 개 있는 경우에는 각 출력 사이에 빈 줄을 출력한다.


코드

문제도 풀다가 맞게 푼건지 모르겠다. ... 이 문제는 문제조차 파악하지 못했으므로 그냥 패스

총평

해당 문제는 문제의 설명이 최악이다. 음.. 아니면 내 실력이 최악이거나, 문제를 몇번이나 읽었는데도 문제가 이해가 되지 않는다. 입력은 시킨데로 받으면 그만이지만, 출력은 연산 결과가 아니라, 연산한 갯수이다. .. 그럴꺼면 연산하지 말고 그냥 명령어만 쌓아두고 쌓아둔 갯수만 출력하면 되지 않는가?

이해가 안되는 부분

  1. 출력이 모든 메모리에 올라간 명령어의 갯수라는데, 이럴거면 왜 연산을 하지?
  2. 0?? 명령에 대해서는 도대체 무엇을 이동 시켜야 하는지 내용이 없다.

..


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기

댓글을 달아 주세요

">
  1. Favicon of http://chimera.pe.kr 몽상가
    2010.02.02 02:05

    이 문제 자체가 결과값보단 실행된 명령어의 갯수를 파악하는 이유는, 처음부터 끝까지 인코딩 표에 의해 계산되지 않으면 단순 입력받은 명령어를 카운트하는 것 만으로는 안되기 때문입니다.

    0ds 인코딩을 해석하면 goto 문인데요, 결국 2~9 인코딩을 전부 해석하지 않으면 올바른 명령어의 갯수를 알 수 없습니다.