백준 18258번문제(큐2)를 풀면서 시간초과문제를 겪었다.
자바스크립트에서 queue를 구현할떄 배열을이용하여 데이터가 들어올떄push로, 나갈떄를 shift내장함수로 구현을했는데 이 shift가 시간복잡도 문제가있어 발생한것이라 추측이된다.( 아직 큐를 어떻게 구현하는지만 찾아봤고 직접 적용은안해봤다.) 자바스크립트에서 shift를 실행하게되면 배열에서 첫번쨰 원소를 추출하고 추출된 자리를 채우기위해 배열의 전 원소를 앞으로 한칸씩 이동시키게되면서 시간복잡도가 N으로 계산이 된다. 결국엔 연산을 더 많이한다는 얘기고, 성능에 영향을 미치는 요소라는말인데, 알고리즘을 풀면서 평소에는 생각해보지못했던 문제를 알게됬다.
그래서 queue에대해 찾아봤고 파이썬이나 자바에선 queue에관련된 라이브러리를 제공해준다고하는데 자바스크립트엔 이를 제공해주지않는다하니.. 알고리즘문제를풀떄 불이익이 하나더 추가된느낌이다. 그래도 직접 작성해보는것도 나쁘지않을것같아 구글링을통해 js로 어떻게 구현을 하는지에대해 찾아봤다.
다행히 다른분이 정리해놓은 벨로그를 참고하여 어떻게 구성하는지에대해 대략적인 그림은 알게되었다.
한 2~3시간은 본것같다. 일부러 어떤 생각을 거치면서 작성하게됬는지 최대한 공감을하고싶어 글을 일일이 읽으면서 내려갔는데 작성한 코드를 보고 다시 글을보니 오히려 이해가 잘됬다. 추가적인내용으로 객체의 키의 값을 접근할떄 반드시 문자열이나 심볼값으로 접근을 해야한다는 문법지식도 알게되었고, 숫자로 접근시 자동으로 문자열로 전환해주는 부분도 알게되었다. 이렇게되면 배열로 접근할떄와 작성된 내용만보면 완전 동일하지만 객체의 키값을 참조한다는내용인데.. 큐를 구성하기위해 어쩔수없이 키값으로 숫자를 사용하지만 이부분은 지양해야되는게 아닐까싶다.