20210629

Jin·2021년 6월 28일

Facts

프로그래머스 <숫자게임> 풀이

어렵지 않은 문제였다. 예시를 직접 그려보자 라는 아이디어가 유효했고, 시간복잡도를 계산하여 병목지점을 예상하는것이 맞아떨어졌다. 이진탐색으로 탐색 비용을 줄이고, 배열 업데이트 비용은 포인터를 사용하여 포인터 위치를 옮기는 연산으로 O(1) 로 만들어 주었다.

문제: https://programmers.co.kr/learn/courses/30/lessons/12987
풀이: https://github.com/gringrape/daily_coding_dojo/blob/main/20210628/python/test_solution.py

프로그래머스 <다트 게임> 풀이

스트링을 정규표현식을 활용해서 여러개로 쪼개줄때, split 만을 활용할 수 있는 건 아니란 것을 알았다. match 를 활용하면 해당 정규표현식과 일치하는 부분을 가져올 수 있었다.

최종 점수를 계산할때, 상태 업데이트가 필요해서, forEach 를 이용해 사이드 이펙트로 처리해주었다. 이전까지, 사이드 이펙트는 항상 리듀스로 대체할 수 있었는데 이번에는 시도를 안했다. 다시 풀어보자.

문자열 파싱중에, 숫자로된 문자열을 구분해주려고 !!parseInt(string, 10) 의 결과가 true 로 처리 되는 것들을 골라내 주었다. 하지만, 숫자 0 이 문제였다. 이거 false 다. 테스트 케이스가 터졌는데 굉장히 찾아내기가 힘들었다. 자바스크립트 삼위일체는 사용하지 말고 명시적으로 isNaN 과 같은 메서드를 사용하는것이 깔끔하다.

문제: https://programmers.co.kr/learn/courses/30/lessons/17682
풀이: https://github.com/gringrape/daily_coding_dojo/pull/23/files

<그림으로 배우는 HTTP & Network Basic> 독서

TCP/IP 프로토콜 군에서 HTTP 전까지의 계층을 가볍게 살펴보고, HTTP 메세지와 URL 등에 대해서 학습했다.

HTTP 프로토콜의 무상태성에 대해서 동료들과 이야기를 나눴다. 상태가 필요할때, 세션방식과 쿠키방식을 주로 사용하는데, 둘의 차이가 무엇인지 이야기를 나눴다. 로그인 상태를 예로 들면, 세션방식은 로그인 상태를 세션으로 표현하고 메모리 혹은 데이터베이스에 세션 들을 저장해두어 처리하는 방식이다. 쿠키는 로그인 상태를 따로 저장하지 않고, 로그인이 되었다고(인증이 되었다고)하는 토큰을 발급하고 해당 토큰을 확인하는 방식으로 로그인을 관리한다.

TCP 프로토콜을 다시 한번 복기했다. three-way handshake 도 한번 더 보았다. 바이트 스트림이라는 개념도 들었다. 데이터를 패킷단위로 잘라서 순서에 관계없이 전송한 후에 다시 합치는 방법이라고 한다. 이전책에는 자세하게 나오지는 않은 이야기라 유심히 보았다.

프로그래머스 <징검다리 건너기> 풀이

끝까지 못풀었다. 투포인터 혹은 슬라이딩 윈도우라는 것으로 푸는 것이다라는 지점까지는 도달했지만, 최댓값의 시간복잡도 줄이는 것을 해결하지 못해서, 슬라이딩 윈도우에서 최대값들을 구하는 노하우들을 참고했다.

발전이 전혀 없었던 것은 아니었다. 최적화문제는 일단 그냥 구현하고 최적화를 수행하자는 생각은 유효했다. 일단 구현이 되니, 병목지점을 체크해서 최적화를 구체적으로 구상할 수 있었고, 최적화 방법을 생각하던 도중 순회의 중첩횟수를 줄이고 답을 구해낼 수 있는 방법을 한참 생각하니, 투 포인터가 떠올랐다. 그것을 통해 슬라이딩 윈도우까지 리즈닝을 할 수 있었다.

이 문제는 이진탐색으로도 풀 수 있다고 한다. 입국심사라는 문제가 이진탐색으로 푸는 문제였었는데, 그것과 같이 연계해서 어떻게 푸는지를 알아보자.

문제: https://programmers.co.kr/learn/courses/30/lessons/64062
풀이: https://github.com/gringrape/daily_coding_dojo/tree/main/20210629/python

Feelings

#.

TIL에 무엇을 공부했는지 적는 것은 조금씩 익숙해져 가는 것 같다. 뭐라도 적으려고 하다보면 자연스럽게 회상이 일어나게 되고, 인출이 되어서 기억을 강화하는데도 도움이 되는것 같다. 허접하더라도 적자. 허접하게 알고 있다는 사실을 알게 되는 것이 나아지는 첫 걸음이다.

#.

방향성과 그에 따른 할일 정렬은 아쉽다. 목적이 있다면 그에 걸맞는 행동을 해야한다. 작업할때도 느낀거지만 목적이 명확하지 않으면, 필요한 일은 적게 하고 필요하지 않은 일은 많이 한다.

#.

동료들끼리 하는 프로젝트가 기대된다. 개인적으로는 리턴즈 서비스를 초기단계부터 경험해본것이 축복이라고 생각하고 감사한다. '어라 이게 진짜 되네?' 라는 경험이 특히 좋았다. 재미있게 해보자.

Findings

어쩌다보니 위에서 다 적은 것 같다.

Affirmation

나는 작고 명확한 할일을 찾아내는 사람이다.
나는 현재 상태보다 기울기에 집중하는 사람이다.

0개의 댓글