첫 풀이 | 베스트 풀이 | 개선된 풀이 |
---|
0.27ms | 0.19ms | 0.18ms |
0.28ms | 0.19ms | 0.12ms |
0.16ms | 0.20ms | 0.17ms |
0.27ms | 0.21ms | 0.59ms |
0.24ms | 0.22ms | 0.16ms |
0.21ms | 0.27ms | 0.18ms |
0.81ms | 0.43ms | 0.15ms |
0.58ms | 0.43ms | 0.32ms |
0.92ms | 0.46ms | 0.33ms |
0.64ms | 0.47ms | 0.32ms |
0.94ms | 0.63ms | 0.42ms |
최초의 내 풀이
프로그래머스 베스트 풀이
최초 풀이 과정
- 2차원 배열을 생성하고
- 보드의 인형들을 2차원 배열에 스택한다
- 보드를 뒤집어서 아래부터 쌓는다
- 스택시 빈 공간(0)은 스킵한다
moves
에 따라 인형들을 pop하여 다른 배열에 스택한다.
stack
을 반복순회한다.
- 인접한 인형과 같은 경우
-1
로 변경한다.
- -1이 된 인형을 삭제한다.
- 삭제 플래그가 false로 유지되는 경우 반복을 중지한다.
다듬을 수 있는 사항
- 쓸모없는 변수, 구문 삭제
- moves를 굳이 map으로 하나씩 뺄 필요가 있을까? 그냥 -1만 해도 될 듯 하다.
- 순서 3에서 인형을 비교하지 않고 전부 다 쌓은 후에 삭제를 하는 방식
- 쌓고 터지는 과정에서 놓치는 인형이 있지 않을까 하는 고민때문이었다.
- 베스트 풀이를 보고 잘 생각해보니 해당 문제의 케이스에서는 그럴 일이 없다.
- 해당 부분을 줄이면 다이어트가 가능하다.
- 현재 빈배열에서 pop을 하는 경우를 막고 있는데 JS는 빈배열에 pop을 했을 때 에러가 나는 것이 아니라
undefined
를 뱉는다.
- 해당 사례에서
undefined
를 검사해서 하는 것이 로직이 간단해질 듯
고민 사항
- 사용하는 변수 및 자료형을 상위로 옮기는게 좋은가 아니면 사용하는 곳에 선언하는 것이 좋을까?
- 전체적으로 쓰는 변수들은 위로
- 지역적으로 쓰는 변수는 아래에서 써도 무방할 듯
개선된 풀이