티스토리 뷰
https://mao.snuke.org/tasks/10
Problem 0010 - Increment
Run Stop Step Reset Submit
mao.snuke.org
맨 처음에는 제일 간단한 생각부터 시작해서 짰다. 커서 하나 만들고 -> 맨 끝으로 옮기고 -> 맨끝에서 값 1 올리고 -> 그게 2가 되면 앞자리 1증가시켜주고 -> 반복.
_0:0_
_1:1_
0_::1
1_:2
02::10
12:20
2::10
:_
그래서 이렇게 짰다. 8 라인.
조금 생각해보니, 2를 별도로 처리할 필요가 없을 것 같아 이 부분을 묶어서 처리하게 바꿨다. 커서를 맨 오른쪽으로 보내고 -> 보낸 다음 해당 커서를 +1을 나타내는 형태로 변경(_). 0_ 이 나오면 1로 바꾸고, 1_이 나오면 _0 으로 바꾸는 식으로 처리할 경우 재귀적으로 같은 과정을 반복하며 끝까지 갈 수 있다.
+0:0+
+1:1+
+:_
0_::1
1_:_0
_::1
:+
이렇게 할 경우 7라인.
커서를 두종류 쓰는거 때문에 +를 _로 바꾸는 과정에서 한 라인이 소모되는데, 여기서 이렇게 안 하고, +가 두개 쌓이면 그 순간 그걸 다른 종료의 커서로 취급해버리면 한 라인을 아낄 수 있다. 이 방법이 상당히 유용함.
0++::1
1++:++0
++::1
+1:1+
+0:0+
:+
그래서 최종적으로 이렇게 6라인으로 줄였다.
'MAO' 카테고리의 다른 글
0032. Log (0) | 2020.05.28 |
---|---|
0025. Balanced (0) | 2020.05.28 |
Markov Algorithm Online (0) | 2020.05.27 |
댓글