
⭐ intro : 문제를 생각해나간 방식
(평석이는 평생 계절학기나 수강해...!!) 이 문제 또한 이해하는데 있어서 오랜 시간이 걸렸다. 일단 단어 위로 아치형 곡선을 그린다는 말에서부터 아니 이거 ui를 구현해야하는 문제인건가 코테를 CSS로도 풀어야 하는건가 구현과제인건가 하는 해괴망측한 생각에서 벗어나지 못하다, 코테에서 이런 단어들은 그대로 구현하는것이 아닌, 비유의 표현이자 일종의 함정카드라는것을 뒤늦게 깨달았었다. 이 문제는 앞서 배웠던, 후입선출 방식의 자료구조인 'stack' 을 활용하여 풀 수 있는 문제였다. 일종의 '뿌요뿌요'의 퍼즐풀이 방식으로 이해했었다. 똑같은 뿌요(같은모양)이 합쳐지면 그대로 사라져버리는, 그런 방식의 퍼즐풀이로서 같은 단어가 쌓이게 되면 연쇄반응으로 바요엔! 아레이아드!가 펼쳐지는 것이다. (그런고로 이 문제는 뿌요뿌요로 바꿀것을 건의한다)

첫번째 예시로서 ABAB를 생각 해 보자. ABAB가 순서대로 빈 공간 스택 [ ] 에 차례대로 들어가게 된다.
- 첫번째 순서로 스택에 [ A ]가 들어가게 된다
- 차례대로 두번째로 스택에 B가 들어가게 되면 기존에 있던, 스택의 가장 맨 마지막에 들어온 요소이자 맨 위의 요소인 A와는 다르므로 [ A, B ]가 쌓이게 된다.
- 세번째로 스택에 A가 들어가게 된다. 이 또한 현재 top()인 B와는 다르므로 그대로 스택이 쌓여 [ A, B, A ]가 된다
- 마지막 B 또한 현재 top요소인 A와는 달라 그대로 스택이 쌓여 최종요소로는 [ A, B, A, B ]가 된다.
- 즉, 좋은단어라는 뜻은 스택에 연쇄반응이 일어나서 다 제거되어야 하므로 length가 0인 배열 [ ]이 만들어 져야 하므로, ABAB는 좋은 단어가 아니다.
이 과정을 토대로 코드를 작성해보도록 해보자.
⭐ 풀이과정
먼저 입력값을 분리해야 한다. 첫번째 요소는 총 단어의 갯수고 두번째부터 마지막 요소까지 테스트할 단어들로 이루어져 있으므로 배열 구조분해 할당으로 input값을 분리하도록 한다.
⭐ 제출답안
let [len, ...arr] = input;
function solution(len, arr) {
let result = 0;
for (let i = 0; i < Number(len); i++) {
const stack = [];
for (let j = 0; j < arr[i].length; j++) {
let stackTop = stack[stack.length - 1];
console.log("ij확인", i, j);
if (stackTop !== arr[i][j]) {
stack.push(arr[i][j]);
} else {
stack.pop();
}
console.log("스택확인", stack);
}
if (stack.length === 0) {
result++;
console.log("-------1증가", result);
} else {
result;
console.log("0그대로", result);
}
}
return result;
}
console.log(solution(len, arr));
/*
ij확인 0 0
스택확인 [ 'A' ]
스택확인 [ 'A' ]
ij확인 0 1
ij확인 0 1
스택확인 [ 'A', 'B' ]
ij확인 0 2
스택확인 [ 'A', 'B' ]
ij확인 0 2
스택확인 [ 'A', 'B', 'A' ]
ij확인 0 3
스택확인 [ 'A', 'B', 'A' ]
ij확인 0 3
스택확인 [ 'A', 'B', 'A', 'B' ]
0그대로 0
스택확인 [ 'A', 'B', 'A', 'B' ]
0그대로 0
ij확인 1 0
ij확인 1 0
스택확인 [ 'A' ]
스택확인 [ 'A' ]
ij확인 1 1
ij확인 1 1
스택확인 []
ij확인 1 2
스택확인 [ 'B' ]
스택확인 [ 'B' ]
ij확인 1 3
ij확인 1 3
스택확인 []
-------1증가 1
스택확인 []
-------1증가 1
ij확인 2 0
스택확인 [ 'A' ]
ij확인 2 1
스택확인 [ 'A', 'B' ]
ij확인 2 2
스택확인 [ 'A' ]
ij확인 2 3
스택확인 []
-------1증가 2
2
*/
⭐ 공부했던 개념들
