우테코 프리코스 1주차 회고
1주차 - 🚀온보딩
온보딩 문제는 총 7문제였다.
그 중, 6번과 7번이 다른 문제보다 까다로운 편이었다.
시작하며
우선 프로그래밍 요구 사항이 node.js 14버전에서 실행 가능해야 한다고 했다.
본인은 node.js 14버전을 사용하고 있지 않았기 때문에 혹시 모를 상황에 대비해 nvm을 이용해 버전을 14로 낮추어 진행했다.
미션은 세가지의 조건을 모두 만족해야 한다.
- 기능 요구 사항
- 프로그래밍 요구 사항
- 과제 진행 요구 사항
가장 중요한 것은 기능을 구현하기 전에 기능 목록을 만들고, 기능 단위로 커밋해야 한다는 것이다.
실제로 기능 목록에 많은 시간을 투자했다.
✨ 배운 점
이때까지 내가 알고 있던 지식들을 많이 활용해볼 수 있었으며 언제 사용해야 하는지 스스로 생각해볼 수 있었다.
문제2
각 문자열에 대해 중복 문자를 삭제하기 위해 스택을 사용했다.
다양한 반례들이 존재했으며, 해당 반례들에서도 조건을 만족하기 위해 코드를 계속 수정하게 되었다.
문제3
처음에는 각 경우에 대해 계산하도록 작성했지만, 더 효울적인 방법이 없을까 고민하다가 다이내믹 프로그래밍을 사용하도록 수정했다.
각 숫자에 대해, 앞 연산 결과를 이용하여 시간을 줄일 수 있었다.
문제6
해당 문제에서 배운것이 상당히 많았다.
평소 같았으면 배열로 모든 연산을 수행했을 것 같다.
닉네임이 포함되는지 여부만 중요하고 닉네임의 index 등에는 전혀 관심이 없다. 어차피 배열에 포함되어 있는지만 판단하면 된다고 생각했기에 집합을 사용해서 해결했다.
배열에서 includes를 사용해서 검색하면 O(N)가 되지만, 집합에서 has를 사용한다면 시간 복잡도가 훨씬 줄어든다.
또한, result에서도 이메일에 해당하는 부분의 문자열을 정렬하고 중복은 제거한다고 했으니, 우선 집합에 이메일을 저장하여 중복요소를 없애고 (최소한의 이메일만 남기기 위해) 배열로 바꾸어 정렬했다.
결과적으로 다른 사람들이 올려둔 극한 상황 테스트(모든 input이 최대; 시간복잡도를 확인하기 위한 것)에서 그리 많은 시간이 걸리지 않았다.
이 문제를 통해, 내가 평소에 잘 사용하지 않던 자료형을 사용해보고 해당 자료형을 사용해야 하는 이유를 스스로 판단해 볼 수 있었다.
중복을 제거해야 하는 경우, 어떤 요소가 포함되어 있는지 확인해야 하지만 index가 중요하지 않은 경우 등에서 집합을 사용하는 것이 좋을 수도 있다는 생각을 갖게 되었다
💡 아쉬운 점
과제를 진행하면서 커밋을 너무 중구난방으로 했던 것 같다.
커밋의 갯수만 해도 90개를 넘어갔고, 각 validation 메소드 하나하나 커밋을 했다.
쓸데없는 커밋보다 비슷한 기능을 하는 validation들을 묶어서 하나의 커밋으로 제출 했어도 좋았을 것 같다.
'개발 > 회고' 카테고리의 다른 글
[회고] 우아한테크코스 3주차 회고 (FE) (0) | 2022.11.16 |
---|---|
[회고] 우아한테크코스 2주차 회고 (FE) (0) | 2022.11.11 |
[회고] 모아도 개인회고 (0) | 2022.10.13 |
[회고] 온앤오프 개인회고 (0) | 2022.09.29 |
[회고] 종이의 집: 공동경제구역 등장인물 성격테스트 개인회고 (0) | 2022.09.01 |