내가봐도 변수명을 이상하게 지어서 해설함


다른글에올린이유는 비번을 까먹어서...

일단 반복되는 문자열을 loop 라고 할때

우리 목적은 입력 시에 반복되는 부분을 제거하고 loop 를 dump 배열에 집어넣는 거임
예) ababab -> ab, abababa -> abababa

그러면 기존 dump 배열에 똑같은 문자열이 존재하는가만 확인하고 존재하면 true 를 출력하면 됨.

각 line 별 iterate 에서

- first - 첫 번째 문자 (loop 는 무조건 첫 번째 문자로 시작하니깐 중요함)
- dump[i] - 입력 문자열을 집어넣음
- lp - dump 에서 loop 가 될 수 있는 가능성이 있는 부분을 가리키는 포인터
예를 들어서 abababab 라면 lp = 2, abababc 라면 lp = 7 임
- tmp - loop 가 될 수 있는 가능성이 있는 문자열

을 뜻하는데,
- 만일 입력 문자가 first 와 같다면 tmp 를 초기화하고
- 입력 문자가 loop 의 동일한 위치의 문자와 같다면 tmp 에 그 문자를 push 하고
  - 아니라면 loop, tmp 를 초기화하고 해당 문자를 tmp 에 push 하지 않으면

tmp 에 들어가 있는 문자열의 상태는 두가지임
1) lp 와 동일한 길이
2) lp 와 같지 않은 길이
위에서 loop 의 동일한 위치의 문자와 같을 때만 push 했으므로, 같은 길이가 나왔을 때는
tmp == loop 인 상태라고 할 수 있음

그러니까 이 경우에 dump 대신 tmp 를 dump[i] 배열에 추가해주면 중복 없이 처리가 가능함