what i learned/회고록

[WIL] 항해99 2주차 회고록 - 알고리즘

zubetcha 2021. 11. 14. 23:41

 

 

 

알고리즘 테스트

 

 

항해99 2주차 알고리즘 주간 회고록

 

 

이번 주는 프로그래머스에 있는 알고리즘 문제 중 난이도가 낮은 문제들을 풀어보면서 자바스크립트 문법에 대해 친숙해지는 시간을 가지는 커리큘럼이었다. 한 주가 바뀔 때마다 조가 새로 바뀌는 시스템이기 때문에 이번 주 또한 새로운 조로 편성이 되었는데 우리 조는 나를 포함해서 3명이었으며, 설마 했던 내가 팀장이 되었다.

 

걱정부터 앞섰다.

아직 자바스크립트의 기본 문법도 잘 모르는 상태에서 문법을 활용해서 문제를 풀어야 했는데 어떻게 문제에 접근해야 하는지 조차 무지한 상태였기 때문에 말 그대로 맨 땅에 헤딩을 할 수밖에 없었다.

 

월요일 9시에 모든 팀원들이 모여서 혹시 알고리즘 문제를 풀어 본 경험이 있는지 물어보았고 모두 나처럼 경험이 없었다. 당장 이번 주까지 풀어야 하는 문제의 수가 정해져 있기 때문에 다같이 머리를 맞대고 한 문제 한 문제씩 풀어나갔다.

 

월요일에 아홉 문제, 화요일부터 목요일까지는 여섯 문제, 금요일에 마지막 한 문제까지, 걷기반이 풀어야 하는 28 문제를 모두 풀면서 팀원들과 함께 서로 리뷰를 진행했고, 금요일에 남은 시간에는 지금까지 풀었던 모든 문제를 다시 풀어보았다.

 

처음에 팀원분들과 걱정했던 건, 뒤에 있는 문제로 갈수록 난이도가 높아지기 때문에 아무리 알고리즘 문제에 익숙해져도 결국 해결하는 데 걸리는 시간은 더 길지 않을까 하는 것이었다. 그런데 신기하게도 문제의 유형과 접근 방식, 로직에 익숙해지니 뒤로 갈수록 한 문제를 푸는 데 걸리는 시간이 점점 더 짧아져 갔다. (사실 정말 난이도가 점점 높아졌는지는 아직 의문이다.)

 

토요일에 있었던 알고리즘 테스트에서는 문제 번호를 선택하고 지문을 보는데 신기하게도 어떤 순서로, 어떤 문법 또는 메소드를 사용해서 문제에서 요구하는 출력값을 그대로 출력할 수 있을지 머릿 속에서 그려졌다. 덕분에 큰 어려움 없이 문제를 풀고 방을 나설 수 있었다.

 

평일에 주어진 알고리즘 문제를 소화하고 마침내 토요일에 있었던 테스트까지 무사히 마칠 수 있었던 건 무엇보다 함께 항해하고 있는 분들의 도움이 컸다고 단언할 수 있다. 앓는 소리를 하지 않았던 건 아니지만, 우리 조 3명 모두 백지 상태에서 고군분투하며 참 열심히 했다. 알고리즘 문제만 풀기에도 벅찬데 커리큘럼과 관련하여 여러 잡음도 있었어서 다소 혼란스러운 와중에도 누구 하나 포기하지 않고 끝까지 물고 늘어지며 모두 토요일의 테스트에서 빠른 시간 내에 코드를 제출하고 방을 빠져나왔다.

 

팀원분들뿐만 아니라 다른 팀의 분들에게도 많은 도움을 받았다. 개인 공부하기도 바쁠텐데 궁금한 것들을 물어보러 가면 아낌 없이 조언과 피드백을 해주셨고 그것들이 로직을 짜는 데 큰 힘이 되었다.

 

이번 주에는 오랜만에 나의 인복은 언제까지 계속될까 라는 생각을 했다.

대학생 때 팀으로 과제를 하게 될 때는 항상 좋은 팀원들을 만나서 좋은 결과를 낼 수 있었고, 전 회사에서도 사수부터 팀장님까지 항상 배울점이 많고 진심으로 존경할 수 있는 분들과 인연이 됐는데 그 인복이 항해까지 이어지고 있다는 게 신기했다.

 

이번 주를 지내면서 가장 좋았던 건 '내가 알고리즘 문제에 대해 느끼는 장벽이 많이 낮아졌고, 어떻게든 풀 수 있게 되었다.' 보다도 지식 공유의 힘을 몸소 느낄 수 있었다는 것이다. 언젠가 나도 누군가에게 지식으로서 도움을 줄 수 있는 레벨이 된다면 나또한 망설임 없이 그렇게 하리라고 다시 한번 다짐했다.

 

2주차에도 1주차만큼이나 여유가 없었다. 실력이 부족하기 때문에 그만큼 시간을 더 부을 수밖에 없었다.

내가 시간을 부은 곳이 금이 간 독이 아니길 바라며,

input이 시간이라면 output은 오래 걸리더라도 언젠가는 가시권에 들어올 거라고 믿는다.

 

 

 

 

회고록 키워드 미션: Javascript ES란? ES5 / ES6 지원 문법

 

 

ES (ECMA Script) 란?

 

ECMA( European Computer Manufactures Association) International이 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 크스립트 프로그래밍 언어로, 자바스크립트를 표준화하기 위해 만들졌으며 웹의 클라이언트 사이드 스크립트로 많이 사용되고 있다.

 

자바스크립트는 1990년대 Netscape 라는 회사에서 최초로 개발되었는데, 이 언어가 웹을 동적으로 향상시키는 역할에 성공하자 Microsoft 에서 Jscript 라는 언어를 개발하였고, 이 두 스크립트에 서로 다른 부분이 많아서 표준이 필요하게 되었다.

 

다만, 브라우저 회사마다 각각의 자바스크립트 엔진을 가지고 있기 때문에 모든 브라우저에서 최신의 ES 문법들을 지원하고 있지는 않다.

 

Javascript engine

 

  • Rhino → Mozilla
  • SpiderMonkey → Firefox
  • V8 → Google, Opera
  • JavascriptCore → Safari
  • Chakra → Explorer, Microsoft Edge

 

호환성 문제를 해결하기 위해서 바벨(Babel) 을 이용할 수 있다.

바벨(Babel)은 컴파일러 및 트랜스파일러 역할을 하여 ES6로 작성된 코드를 ES5로 변환한다.

 

 

ES5

 

  1. Array > forEach, map, filter, reduce, some, every 와 같은 메소드 지원
  2. Object에 getter, setter 지원
  3. strict 모드를 지원하여 세심한 문법 검사
  4. JSON 지원
  5. bind() 메소드 지원

 

 

ES6

 

  1. let, const 변수 선언 키워드 추가
  • 변수를 선언할 때 함수 스코프를 가진 var 키워드를 대체하기 위해 블럭 스코프를 가진 let, const 키워드 추가
  • let 으로 선언한 변수는 값을 유연하게 담을 수 있으며, const 로 선언한 변수는 고정된 값을 가짐
  1. arrow 문법 지원 > 편하고 간결하게 코드를 작성할 수 있으며 this를 바인딩하지 않음
  2. iterator, generator 추가
  3. module import, export 키워드 추가 > 모듈을 받거나 내보낼 수 있음
  4. Promise 추가 > 비동기 처리 객체
  5. Default, Rest 파라미터
  6. Spread 연산자 (...)
  7. Template literals