반응형

이번에는 HISTOGRAM VIEWER 라는 문제가 주어졌네요.

HISTOGRAM VIEWER....

뭘까요? 히스토그램이란게... 

번역은 다음에 알아보도록하고 잘 이해가 안가면 타겟을 보면됩니다.

이렇게 이렇게 만들어달라라는 예시가 아주 잘 표현되있는 타겟이죠.

다음과 같은 이미지를 출력하는 거군요.

문제를 읽어봅시다.

READ A VALUE FROM IN

DRAW A LINE THAT MANY UNITS

LONG TO THE RIGHT OF THE

PREVIOUS LINE DRAWN

즉 Y값의 최대값에서부터 입력되 값을 갯수만큼 출력하라는 거네요 

입력이 들어올때마다 X값이 1씩 증가하는거 같구요

뭐... 그렇지않을까요?

크흠..

지문에 대해서는 넘어가도록 하고 솔직히 이번 주제가 전 주제보다 훨씬 쉬운 주제라고 생각되요

즉 X값을 입력값만큼 반복 해 준 후, 다음 입력이 들어올때마다 1씩 증가해서 출력해주면 되고 

Y값은 최대값인 17부터 1씩 줄여나가면서 입력값만큼 반복해주면 되는겁니다.

X값 Y값을 출력후 3을 출력하고 -1을 출력합니다.

이걸 반복 해주면 되요

....

절 믿어주세요

정말 저번보다 쉬워요

코드를 보시면 아실겁니다.

코드를 보시면 노드가 2개만 사용되는것을 볼 수 있습니다.

1. y값을 bak에 저장해둡니다.

그리고 위에서 길이값을 받아요 

그 후 y값을 2번으로 보낸 후, 1을 뺍니다.

그리고 길이값도 1을 뺍니다.

길이값이 0이면 0을 오른쪽으로 보내서 해당 길이출력을 그만둡니다.


2.x값을 bak에 저장하고 먼저 출력합니다.

그 후 1에서 받은 값을 판별합니다.(y값 혹은 0)

만약 0이 들어왔을경우 -1을 출력하고 x값에 1을 더해줍니다.

아닐경우 y값을 출력, 3출력, -1을 출력하여 이미지를 하나 그려주고 다시 처음으로 돌아갑니다.


이번문제를 풀었으니 남은 TIS-100의 문제는 5문제네요.

나머지 문제도 빨리 풀어보도록할께요

....

사실 문제를 다 푼지는 오래됬지만 올리기 귀찮아서 미루고있는중입니다.

최대한 빨리 나머지 문제들의 풀이도 올려보도록 하겠습니다.

tis-100 이후에도 풀 문제가 아직 남아있기때문에 그 문제도 되도록 빨리 풀어보도록 할께요

그럼 20000!



반응형
반응형

이번에는 조금 많이 헤맸던 주제입니다.

헤맸던만큼 좋은결과가 있었으면 좋았겠지만 우선 클리어를 목표로 두고 해봤네요.

뭐 나름 노력했으니 이정도면 되지않겠습니까? ㅎㅎㅎ

클리어가 가능한 공략이니 이 코드를 보시는 분들이 수정해서 좀더 속도를 향상시켜주세요

전 여러분을 믿습니다. (저도 알려주세요 ㅋㅋㅋ)


일단 어떤문제인지 부터 알려드릴께요

READ AN X VALUE FROM IN

READ A Y VALUE FROM IN

READ A WIDTH VALUE FROM IN

READ A HEIGHT VALUE FROM IN

DRAW A RECTANGLE OF THAT SIZE

AT THE SPECIFIED LOCATION

영알못인 제가 대충 해석을 해보자면 

처음 입력값은 X의 위치이고

다음 입력값은 Y의 위치입니다.

그 다음에 받는 값은 가로의 길이이구요 그 다음값은 세로의 길이입니다.

즉 다음과 같이 표시가 된다는 소리입니다.

순서대로 보겠습니다.

X 출력 후 Y가 출력됩니다. 

그 후 3번째 입력횟수만큼 3을 출력한 후 -1을 출력합니다.

그리고 Y를 1 증가합니다.

이것을 4번째 입력수 만큼 반복합니다.

이 쉬운걸 코드로 짜내면 됩니다 ㅎㅎㅎ

에혀...

이 문제 클리어하는거보다 다른문제 클리어하는게 더 빨랐습니다.

어쨋든 클리어했으니 제가 성공했던 코드를 보도록 하죠.

1번부터 설명드릴께요.

1.X값을 오른쪽으로 Y값을 저장후 아래로 보냅니다.

  그 후 BAK에 저장하고 가로값을 아래로 보낸 후 세로값을 저장합니다.

  세로값을 1을 빼준후 0인지 확인을 합니다.

  0이 아닐경우 BAK에 저장한 Y값에 1을 더한 후 아래로 보내줍니다.

  세로값이 0이 될때까지 반복 합니다.

  세로값이 0이 되면 -1을 아래로 보내주고 다시 입력값(X값)을 받습니다.


2.왼쪽에서 X값을 받아 저장합니다.

  그 후 X 값을 아래로 보내주고, BAK에 X값을 저장, 아래에서 값을 받습니다.

  받은값이 0이면 왼쪽에서 다시 x값을 받고, 아닐경우 BAK에 저장한 X값을 아래로 다시 보내줍니다.


3.Y값을 받아서 오른쪽에 보냅니다.

  가로 값을 받아서 저장합니다.

  그리고 가로값이 0인지 확인하여 0이 아닐경우 3을 오른쪽으로 보내주고 1을 감소합니다.

  0일경우 -1을 오른쪽으로 보낸 후, 세로값을 받고 세로값도 오른쪽으로 넘겨줍니다.

  그 후 세로값을 확인해서 0보다 작으면 0을 오른쪽으로 보내고

  그렇지않을 경우 BAK에 저장한 가로값을 ACC로 바꾸고 저장합니다.

  

4.X값을 받고, Y값을 받습니다.

  왼쪽에서 색상값을 받아서 0이면 -1을 출력한 후, 0을 2번으로 보내줍니다.

  왼쪽에서 받은 색상값이 3이면 3을 출력합니다.

  왼쪽에서 받은 색상값이 -1이면 -1을 위로 보낸 후 처음으로 돌아갑니다.


단순하게 보자면 1번은 세로값을 계산하는 노드, 2번은 X값을 계산하는 노드, 3번은 Y값을 계산하는 노드, 4번은 색상값을 계산하는 노드로 보시면 됩니다.


반응형
반응형

이미지 테스트 패턴 2번쨰 단계입니다.

먼저 문제부터 보고 가겠습니다.

지문을 읽는거보다는 타겟을 보고 해석하는편이 더 빠를거 같네요.

타겟과 같은 이미지로 출력을 하게하면 됩니다.

보면 패턴이 보입니다. 흰색 검은색 흰색 검은색 순으로 패턴이 출력되고 있네요.

(0,0) - 흰색, (1,0) - 검은색, (2,0) - 흰색, (3,0) - 검은색

x값이 1씩 증가할때마다 흰색과 검은색이 번갈아가면서 나타납니다.

그리고 동일한 x값일때 y값이 1씩 증가할때마다 흰색과 검은색이 번갈아가면서 나타납니다.

모자이크 모양이 나타나도록 하는 패턴이네요.


따라서 출력값을 흰색값과 검은색을 출력해주는 부분이 필요할거 같습니다.

그리고 x가 홀수번 반복해서 출력값을 처음 입력된값의 다음값을 입력받게 합니다.

오른쪽 아래에 있는 값이 출력값입니다.

3과 5를 번갈아가면서 출력하고있습니다. (3이 흰색값 5는 색상값이 없기때문에 검은색을 출력합니다.)

가장 왼쪽에 있는 노드는 y값을 알려줍니다.

처음에는 0을 출력 그 후 1씩 더한 acc값을 출력하게 되는거죠 

중간에 있는 노드가 이 노드의 핵심입니다.

이미지 테스트 패턴1에서도 했던것처럼 x,y값을 출력한 후 색상값을 출력합니다.

다른점은 이전이미지 테스트 패턴1에서는 30번을 반복해준반면 

여기에서는 31번을 반복하여 홀수를 만들어줍니다.(29번은 안되요 마지막 30번의 흰색값이 적용되지 않아서 fail이 납니다.)

이렇게 하면 모자이크모양의 이미지를 출력할 수 있습니다.


반응형
반응형

드디어 처음으로 TIS-100에서 이미지를 그리게 되었습니다.

처음 접하면 어떻게 해야 이미지가 그려지는지 알기 힘듭니다.

왜냐면 어떤 입력값이 어떤 출력값인지 알려주는 매뉴얼이 없기떄문인데요

나무위키에 검색해보면 자세하게 나와있지만 여기에 간단하게 설명을 해두려고합니다.


처음에 입력받는 값은 x 그 후의 값은 y 그 다음값은 색상이 됩니다.

여기서 중요한건 처음에 입력받은 x,y값은 한번만 받고 그 다음은 색상값만 받게됩니다.

즉 x-> y-> 색상-> 색상-> 색상 의 순으로 값을 받습니다.

이때, 색상값을 받을 경우 x+1의 위치에 색상이 지정됩니다.

중요한것은 y값이 변하지 않아 줄바꿈이 일어나지 않는다는점인데요.

이를위해서는 x,y값을 다시 받을 필요가 있습니다.

어떤 위치에서든 -1이하의 값을 입력하면 처음값으로 돌아갑니다.

즉 -1을 입력하게 되면 x,y값을 다시 받을 수 있습니다.

즉, x-> y-> 색상 ->색상->색상-> -1 ->x ->y ->색상 

과 같이 x,y값을 새로 지정해줌으로써 줄을 바꿀수 있습니다.

색상같은경우  0-검정, 1-어두운 회색, 2-밝은 회색, 3-흰색, 4-빨간색 으로 대응됩니다.

첫번째 이미지패턴 문제는 매우 간단합니다.

모든 화면을 하얀색으로 채우면 됩니다. 

어려울건 없어보이네요.

아 물론 출력방식을 몰랐다면 한참 해맸을거라 생각됩니다.

참고로 x축의 좌표는 0~29이며 y축은 0~17입니다.


따라서 시작은 0,0을 준 후 흰색값인 3을 30번을 주면 됩니다.

그 후 -1을 주어 x축에 0, y축에 1을 증가한값을 준 후 흰색값인 3을 30번 주면됩니다.


Y값은 1씩 증가하고 X값은 0의 값을 가진후 30에서 1씩 빼주면 되는 로직입니다.

그 후 X값이 0 이상이면 3을 출력 아니면 -1을 출력후 Y값을 1 증가해줍니다.


반응형
반응형

이번에는 곱셈을 해볼께요

곱셈... 즉 덧셈이라는 소리죠

초등학교 수업때 지겹도록 본 내용입니다.

1*5 = 1+1+1+1+1 = 5

다른방법이 있을지도 모르겠습니다만, 위의 방식으로 이번 문제를 해결해보도록 하죠.

문제입니다.

READ VALUES FROM IN.A AND IN.B

MULTIPLY THE VALUES

WRITE THE PRODUCT TO OUT

입력값 2개를 받은 후 곱하여 출력하라는 거군요

이해했습니다.

위에서 설명한 방식대로 문제를 풀이하는 걸로 해보죠

입력A를 카운트 하는 것으로 예시를 들겠습니다.

1. 입력A가 0이거나 입력B가 0일 경우 0을 출력한다.

2. 입력 A가 1이상이면 입력B값 임의의 값 X에 더한 후 입력 A의 값에 1을 뺀다.

3. 이후 2를 반복하다가 A가 0이 되는순간 저장된 임의의 값 X를 출력한다.

입니다.


코드로 보도록하죠

1. A의 값을 받아서 0이 아닐경우, 저장합니다.(카운트를 위한 변수)

 그 후 B의 값을 받아서 0이 아닐경우, 2로 2번 보냅니다.(더할 값)

B의 값을 보낸 후 저장된 값을 1 뻅니다.

그 후 0인지 확인을 하여 0일 경우 0을 출력하고 아닐경우 B의 값을 다시 보냅니다.(이하 반복)

2.카운트 값을 받아서 0인지 확인합니다.

0이 아닐경우 SWP 하여 B의 값을 더합니다.(계속 누적합니다.)

0일 경우 SWP 하여 출력합니다.(다음 값을 계산한때 카운트값을 초기화가 됩니다.)

반응형
반응형

이번에는 입력신호를 뒤짚어서 출력하는 해보겠습니다.

입력값이 1,2,3,4,5로 들어왔다면

출력값은 5,4,3,2,1로 출력되는 겁니다.

SEQUENCES ARE ZERO-TERMINATED

READ A SEQUENCE FROM IN

REVERSE THE SEQUENCE

WRITE THE SEQUENCE TO OUT

이번에는 새로운 노드가 나왔습니다.

입력된 값을 저장해두는 노드인대요

FILO(First In Last Out)이라는 것입니다.(자세한 내용은 검색하시면 나와요.)

즉 입력된 순서대로 저장이 되어 출력을 할때는 마지막으로 입력된 값이 가장먼저 출력이 됩니다.

그리고 이번에도 역시 0을 기준으로 REVERSE하는 것을 목표로하는 군요.


그럼 단순하게 로직을 생각해보겠습니다.

0이 되면 입력을 그만두고 출력이 되야합니다.

그리고 노드에 있는 데이터가 모두 출력이되면 다시 입력을 받아야합니다.

따라서 입력된 값이 몇개인지 카운트할 변수가 필요할거같네요.

어렵게 생각하지 말고 코드를 봅시다.

1. 입력값을 오른쪽 저장노드에 넣어준후 2번으로 카운트를 보냅니다.

이 때, 카운트값이 1이면 1증가이고 0이면 출력을 시도하라는 뜻입니다.


2.위에서 카운트 값을받습니다.

0일경우 BAK에 저장해둔 카운트값을 3으로 넘겨줍니다.

아닐경우 SWP하여 1씩 증가시켜준 후 SAV해줍니다.


3. 2에서 받은 카운트값을 1씩 감소시키면서 출력값을 아래로 보냅니다.

카운트값이 0이 되면 0을 출력한 후 2에게 출력을 완료했다고 신호를 보냅니다. (이 신호는 1까지 이동하여 다시 입력을 받기 시작하게 됩니다.)


개인적인 의견으로는 반전하는 이번 코드보다 최소,최대값을 구하는 코드가 더 어려웠던 것 같습니다.

반응형

+ Recent posts