[TIL] 20210617 - 항해 11일차

Jihyun·2021년 6월 17일
0

항해99

목록 보기
7/46

오늘 공부한 것

BAEKJOON ONLINE JUDGE(BOJ)

오늘의 알고리즘 코드(github)

  • 1874 스택 수열
  • 1021 회전하는 큐
  • 18258 큐 2
  • 1260 DFS와 BFS
  • (2108 통계학 푸는 중)

알고리즘을 풀며 느낀 점

체력은 중요하다
일단 오늘은 DFS와 BFS에 시간을 너무 많이 쏟았다.
스택이나 큐와 달리 개념이 명확하게 잡혀있지 않으니 코드로 구현하는 게 너무 어려웠고, 왜 '틀렸습니다🔥'를 반환하는지 찾는 것도 너무 오래 걸렸다.

어제 새벽까지 문제를 풀던게 독이 됐는지 낮에 병든 닭 처럼 비실거렸다.
그렇게 DFS와 BFS를 몇 시간 붙잡고 있다가 쓰려지듯 1시간을 잤는데 일어난 후 코드를 뒤엎고선 30분만에 풀어버렸다😣
체력과 수면의 질의 중요성을 절실히 깨달은 케이스...

무리하지말고 꾸준히 매일 달리는 게 중요하다.

반례를 찾으려고 노력하자
백준 문제를 풀며 제일 당황스러울 때는 '틀렸습니다'가 나올 때다.
'런타임 오류' '타입 오류' 등등 각종 오류는 대략 이유를 알 수 있으니 해결하면 되고, '시간 초과'는 그냥 잠자코 에디터로 돌아가 코드를 개선하면 된다.

그런데 분명 예시 출력값이 완벽하게 나오는데 틀렸다고 하면 멍해진다.

그 때마다 질문게시판에 가서 다른 분들이 찾아주신 반례 사례들을 찾아 대입해보다 70% 정도는 해결 방법을 찾아낸다.

그런데 다른 사람이 찾아주는 반례가 얼마나 큰 의미가 있을까 하는 생각이 든다.

물론 정말 못찾겠다면 그렇게라도 일단 답을 찾아내는 것이 중요하지만, 내가 일단은 경계값이나 시도해볼 수 있는 값들은 모두 시도해보고 도움을 청하는게 맞지 않을까?

나에게 이 알고리즘 주차는 알고리즘을 많이 풀어본다는 점에서도 중요하지만, 디버깅이나 반례를 찾는 연습을 하고 자바스크립트 문법을 많이 사용해본다는 데에 의의가 있다고 생각한다.

그러니까 내일의 나에게 하고 싶은 말은.. 화이팅 나 자신😣

자바스크립트 성능 개선

백준 알고리즘을 풀다보면 생각보다 자주 시간 초과를 만난다.

시간 초과를 해결하기 위해 이번 주에 해 본 행동은 다음과 같다.

  1. 시간 복잡도 줄이기
  2. 출력 횟수 줄이기
  3. switch-case 구문 이용하기
  4. ( ✨new! ) queue에서 pop을 해야할 때 진짜로 pop(shift) 하지 않기

'BOJ 18258 - 큐 2' 에서 명령의 수가 최대 2,000,000개 인데 pop을 계속 해준다고 생각하면 배열은 계속 이동, 이동, 또 이동하게 되는 것이다.

그래서 queue에서 빼주지 않고 마치 queue의 맨 앞 노드가 어떤 index인 것 처럼 연산하도록 startNode 라는 변수를 만들어주었다.
그리고 pop이라는 명령이 내려질 때마다 startNode++을 해주었다.

이렇게 바꾼 이후에 다행히도 '맞았습니다!'를 받을 수 있었다.

이 과정에서 봤던 글이 [자바스크립트] 성능을 높이는 코드 스타일 이다.
결과적으로는 같은 기능이지만 성능이 꽤 차이나는 경우가 있다는 것을 알았다.

해당 글의 저자가 이야기한 것처럼 아주 기초적인 코드부터 어떻게 작성하느냐에 따라 실행 성능에 큰 차이가 발생할 수 있다는 것을 염두에 두고 개발을 해야겠다는 생각이 든다.


VSC로 하는 디버깅은 아래 유튜브를 참고해서 사용하고 있다.
드림코딩 - 코딩의 시작과 끝, 디버깅

profile
Don't dream it, be it.

0개의 댓글