안 쓰던 블로그

TIS-100 SEQUENCE COUNTER 공략 본문

취미/TIS-100 공략

TIS-100 SEQUENCE COUNTER 공략

proqk 2020. 6. 28. 14:50
반응형

0이 들어올 때까지 들어온 값의 합을 저장하다가

0이 들어오면 합을 S에, 값의 길이를 L에 출력한다

 

한 노드 당 한 개씩 있는 ACC와 BAK을 활용해야 한다

ACC는 새로운 값이 오면 무조건 덮어씌워지므로

1. 값을 받는 노드

2. 합을 저장하는 노드

3. 길이를 저장하는 노드

이렇게 다 따로 해줘야 한다

 

맨 처음에 입력을 받아서 ACC값에 넣고 왼쪽, 아래, 오른쪽으로 보낸다

그냥 MOV LEFT, RIGHT, DOWN 으로 하면 다음 값을 받아서 넘어가니까 꼭 ACC에 저장한 뒤 그 값을 넘겨야 한다

 

내 코드에서는 값을 받아오는 노드 기준으로

오른쪽 3개가 길이 저장

왼쪽 3개가 더할 값 저장

아래 2개가 합을 저장하는 작업을 수행한다

 

합을 저장하는 작업을 하는 노드를 자세히 보면,

UP에서 오는 값으로는 이게 0인지 아닌지를 확인할 것이고,

LEFT에서 오는 값으로는 더하기 작업을 할 것이다

 

먼저 UP값을 받아서 ACC에 넣는다

그리고 ACC와 BAK을 값을 바꾼다

BAK은 이제까지의 합이 저장되는 곳이다 처음 값은 0임

그리고 ACC에다가 LEFT에서 오는 값을 저장한다

다시 SWP해주면 BAK에는 합이 저장되고, ACC는 UP값을 그대로 가지고 있다

 

JEZ로 ACC값이 0인지 0이 아닌지 확인한다

왜 위에서 확인 안 하고 합을 구한다음에 하냐면, 0이 들어왔어도 지금 ACC에 있는 값은 합해줘야 하기 때문이다

값을 받고 바로 저장하는 게 아니라 다음 값이 들어오면 합을 계산하기 때문에, do-while같은 느낌으로 한 번은 해줘야 함

 

아무튼 ACC값이 0이면 출력해야 되니까

BAK값을 다시 ACC로 SWP하고 DOWN으로 OUT.S에 쓴다

 

0이 아니면 END로 바로 점프해서 다음 숫자 받으러 간다

 

여기는 길이를 저장한다

BAK에는 이제까지의 길이가 저장된다

길이는 합처럼 저장하는 게 아니라, 0이면 무조건 출력하면 되고 0이 아니면 +1만 하면 되기 때문에

위에서 0인지 아닌지 체크한다

 

0이면 ZERO:로 바로 분기하고 아니면 +1 연산을 하고 END:로 빠진다

ZERO에서는 BAK값을 ACC로 보내고 ACC를 출력한다

반응형
Comments