2주차 알고리즘풀이 회고록

김현진·2022년 3월 20일
0

회고록

목록 보기
2/11

미니프로젝트가 끝나고 숨돌릴 틈도 없이 바로 알고리즘 추차가 시작되었다.
새로운 조원들을 만나 간단한 인사를 나누고 바로 프로그래머스 알고리즘 Level 1문제들을 접하게 되었다.
이번주차에 개별로 주어진 문제풀이 할당량은 28+a개 였다.

우리조는 하루에 총 8문제를 풀고, 그 중 2문제를 조원들에게 어떻게 풀이하였는지 풀이법을 설명하는 방식으로 진행하기로 하였다.

살면서 처음으로 접해보는 알고리즘 문제 역시나 쉽지 않았다.
어디서부터 어떻게 접근을 해야하며, 어떤문제에 if문을 쓰고 for을 써야할지조차 감이 잡히지않았다.

한참을 이것저것 시도해보다 도저히 안돼겠다 싶어 내가 선택한 방법은 답안지를 보고 분석하는 방법이었다.

구글링을 해서 문제를 풀어가볼수도 있지 않을까? 하는생각도 들었으나 접근방식조차 모르는상태에서 어떤걸 구글링을해야할지 모르는상황이었기에 답안지를보고 어떻게 접근하면되는지, 어떤방법으로, 어떤함수들을 사용하는지 감부터 익히기로 하였다.

처음엔 답을보고 분석하는것 조차 어려웠다. 처음보는 함수,메서드 들이 너무나도 많았고 for,if,while등 조건문,반복문에 대한 개념도 완벽하게 잡혀있지않은상태라 더욱 힘이들었던 것 같다.

함수,메서드등 모르는 것이 나올땐 항상 MDN 공식자료들을 엄청나게 많이 찾아보았고, 어떻게 사용되는지, 어떤 기능들을하는지 반복해서 공부하여 익히는시간을 많이 가졌던것 같다.

이런방식으로 알고리즘 문제에 접근하다보니, 3일차쯤 됬을때부터는 답을 보지않고도 어떤식으로 접근해야겠다라는 감이 생기기 시작하였고, 답지를 보지않고도 풀수있는 문제들이 생겨나기 시작했다.

그리고, 조원들과 문제 풀이법을 공유하다보니, 여러사람들의 풀이법을 보며 시야가 넓어지고 있다는 느낌도 많이 받았다.
실제로 문제를 풀면서 다른 조원이 풀었던 방식을 응용하여 문제를 풀었던 적도 꽤 많았던것 같다.

그러다 보니 조원들끼리 문제 풀이법 공유하는 시간을 모두가 유익하다고 생각하게되었고, 모든 문제를 다 푼 후, 자발적으로 본인이 공부해서 알게된내용을 서로 공유해 주기도 하였다.

그중에서 조원 중 한명이 설명해준 ES가 가장 기억에 남는다.


Javascript

텍스트자바스크립트는 객체 기반의 스크립트 프로그래밍 언어로, 이 언어는 웹 브라우저 내에서 주로 사용하며, 다른 응용 프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. 자바스크립트는 본래 넷스케이프 커뮤니케이션즈 코퍼레이션의 브렌던 아이크(Brendan Eich)가 처음에는 모카(Mocha)라는 이름으로, 나중에는 라이브스크립트(LiveScript)라는 이름으로 개발하였으며, 최종적으로 자바스크립트가 되어 지금까지 이어지고있다.


ECMA Script

ES(ECMA Script)는 ECMA-262 기술 규격에 따라 정의하고 있는 표준화된 스크립트 프로그래밍 언어로, 자바스크립트를 표준화하기 위해 만들어졌다.

이것이 탄생한 배경에는 '브라우저 전쟁'이라고 하는 웹 브라우저 시장에서의 점유율 싸움이 있었다.
넷스케이프 사에서 개발한 Javascript가 선풍적인 인기를 끌기 시작하자 마이크로소프트 사에서도 IE 3(우리가 알고있는 인터넷 익스플로러)에 JScript라는 이름으로 자바스크립트를 탑재했지만, 실제적으로는 둘의 내용이 매우 달라서 같은 기능을 구현하더라도 개발자들이 해야할 일과 시간이 훨씬 늘어나게 되었다.
실제로 서로 사용자를 끌어들이기 위해 이것저것 기능을 추가하다 보니 Javascript와 JScript는 점점 다 달라지는 경향을 보였고, 이에 보다못한 European Computer Manufacturers Association (ECMA, 현 ECMA International)에서 Javascript에 대한 표준을 정하게 되었다.

jJavascript는 10일이라는 정말 짧은 기간에 만들어진 언어이기때문에 설계상의 미스가 있을 수 밖에 없다. 그렇기에 지속적으로 버전이 업그래이드 되고, 기능이 늘어 1999년 ES3, 2009년 ES5, 2015년 ES6가 생겨 나게 되었다고 한다.


ES 버전에 따른 특징

ES3

우리가 흔히 말하는 자바스크립트로 함수 단위의 스코프, 호이스팅, 모듈화 미지원, 프로토타입, 클로저 등등 자바스크립트의 기본적인 특징들이 들어있다.
대부분의 브라우저에서 지원하고, IE8까지 크로스브라우징하는 환경이면 ES3를 쓰고 있다고 생각하면 된다.


ES5

4는 너무 급변하는 내용이 있었던지 거절되고, 그 후에 점진적인 개선을 하고자 5가 나왔다. 기본적으로 IE9부터 본격적으로 지원을 하지만 es5-shim을 사용하면 하위 버전에서도 특정 기능들을 지원해준다.
<추가된 기능>
1. 배열과 관련해서 새로운 메소드 생성
(forEach, map, filter, reduce, some, every => 이 메소드들은 개발자가 반복 횟수나 조건을 잘못 입력하는 등의 실수를 줄여주는 효과가 있다.)
2. object에 대한 getter/setter 지원
3. 자바스크립트 strict 모드 지원(더욱 세심하게 문법 검사를 한다.)
4. JSON 지원(과거에는 XML을 사용하다가, json이 뜨면서 지원하게 되었다.)
5. bind() 메소드가 생겼습니다. (this를 강제로 bind 시켜주는 메소드)


ES6

<추가된 기능>
1. let, const 키워드 추가
2. arrow 문법 지원
3. iterator / generator 추가
4. module import / export 추가
5. Promise 도입
6. Default, Rest 파라미터
7. 해체 할당, Spread 연산자
8. 템플릿 리터럴
9. 호이스팅이 사라진 것 같은 효과
10. 함수 단위 스코프에서 블록 단위 스코프로 변경
11. 화살표 함수


ES 관련하여 공부를 할수있는 시간이 되었고, Javascript의 역사도 알수있는 굉장히 유익한 시간이었다.
하지만 아직 익숙하지않고 ES버전에따라 추가된기능에 대해 잘알지못함으로 조금 더 깊은 공부가 필요할것 같다.

알고리즘뿐 아니라 지금 우리가 배우고있는 언어의 기초지식까지 쌓으며 공부를 하게되니 점점더 공부에 속도가 붙었고,
우리조는 주어진 28개의 문제를 각자 모두 다 풀고 시간이 조금남아 이후 1~2문제정도 더 풀어보았던것 같다.

대망의 시험날, 열심히 공부했던 우리조는 모두 긴장하여 알고리즘 시험장에 입실하였고, 열심히 했던 만큼 처음으로 우리조원을 포함한 A반 모두가 전원 시험에 통과하는일이 생겨버렸다.

아직 항해를 시작한지 2주일밖에 안되어 같은조원이 아니면 잘모르는 사람이 많았는데 A반 전원 통과라는 결과를 받고 너나 할것없이 원래 알던사이처럼 모두함께 축하하고 함께 기뻐하였다.

2주차 회고

이번 주차는 익숙하지않은 언어를 사용해 알고리즘 문제를 풀어보는 시간이었다.

알고리즘에 '알'자도 몰랐던 나로썬 처음엔 정말 막막하였지만, 모방은 창조의 어머니라고 했던 명언처럼 다른사람이 한 답안을보며 하나하나 천천히 접근하였고, 이내 문제를 스스로 해결할수있는 지경까지 오게되니 정말 그 기분과 쾌감을 말로 표현할수가 없을정도로 짜릿하고 재밌었다.

정말 처음엔 이런문제들을, 이런 언어를 과연 내가 진짜로 다룰수있을까? 해낼수있을까? 하며 나스스로에게 많은 의심이 들기도 하였다.
하지만 혼자가 아닌, 조원들과 함께 서로 풀이를공유하고, 서로 알려주고 하다보니 그런 의심들을 어느순간 싹 사라지게 되었고 나 뿐만아니라 우리조원 모두가 해낼수 있는 사람이 되어있었다.

이번주차는 나스스로가 정말 큰 깨달음을 얻을수 있었던 주차였던것 같다. 나도 하면 할수있다는 것을 느꼈고, 혼자가 아니라 함께하면 그 시너지가 배가 된다는것을 느낄수있었다.

또한, 이번 알고리즘을 통해 Javascript 언어 와 좀더 친숙해진것 같고 코딩하는것에 더욱더 재미가 붙게 된것같다.

앞으로 개발자가 되어 코딩을 할때 모든것이 다 알고리즘으로 이어질 것임으로 앞으로 항해99 일정을 진행하면서도, 알고리즘을 손놓지 않고 계속해서 알고리즘 공부를 진행하고자 한다.

0개의 댓글