너무나 하고 싶은 우아한 테크 코스의 1주차 과제 제출 마감일이다.
지난 한 주간 우테코 문제를 생각하는데 정말 많은 시간을 쏟았던 것 같다.
문제를 어떻게 풀지 떠올리는데는 그렇게 오랜 시간이 걸리진 않았지만
- 개인적으로 애매하다고 느꼈던 문제의 조건들에 대한 고민
- 변수명, 함수명, 함수 분리 등에 대한 고민
- 더 좋은 코드는 무엇일까, 좀 더 코틀린스러운 코드는 무엇일까에 대한 고민
이런 여러 고민이 대부분의 시간을 차지했다.
이전에도 네이밍, 함수 분리, 코틀린스러운 코드 등에 대해 고민해왔다고 생각했는데
지난 1주차를 겪고 이전보다 훨씬 많은 고민을 하게되었다.
프리코스만으로도 많은 도움이 된다는게 무슨 말인지 알 것 같다.
아! 그리고 무엇보다 코틀린 컬렉션과 스트림 함수에 대한 이해가 한 층 높아졌다.
물론 아직 이해가 많이 부족하지만 이전까지는 뭔지도 몰랐던 것들을 알게 되었고
적절한 상황에 사용해보려고 노력하는 과정이 너무 좋았다.
과제 설명을 보면 기능 목록을 우선 작성하고 기능 목록을 구현 후 커밋하라고 되어있다.
정말 안타깝게도 문제를 모두 풀고 나서 발견했다,,,
하지만 문제를 풀고 나서도 기능 목록을 작성하는 것이 도움이 됐다.
기능 목록을 작성하니 기능이 어떻게 분리되고 그에 따라 함수를 어떻게 분리해야할지 더 잘 보였다.
이번엔 아쉽게 순서가 뒤바뀌었지만 그래도 기능 목록을 작성하라는 이유를 확실히 알 수 있었다.
문제를 풀다가, 혹은 코드를 정리하다가 내 코드가 마음에 안들면 다른 사람들은 어떻게 했는지 궁금한 때도 있었다.
하지만 다른 사람 코드를 보고나면 어쩔 수 없이 영향을 받을 것만 같아서 내가 제출하기 전까지는 보지 않기로 했다.
소감까지 제출하고 빨리 다른 사람들 코드도 구경하고싶다~!
1. 책 펼치기 게임
문제 조건에 대해 가장 많이 고민한 문제이다.
개인적으로 애매하다고 생각 됐던 부분은 이렇다.
시작 면이나 마지막 면이 나오도록 책을 펼치지 않는다.
이 말이 그저 1~400 안으로 숫자가 들어올 것이라는 부연 설명인지,
1,2 / 399,400 페이지를 제외하고 숫자가 들어올 것이라는 추가 조건인지가 굉장히 헷갈렸다.
책의 모든 페이지에 번호가 적혀있다고 했고 시작 면과 마지막 면이 나오게 책을 펼치지 않는다고 해서
나는 1,2 / 399,400은 펼치면 안된다는 게임 규칙으로 받아들이기로했다.
또 예외처리를 어디까지 해줘야하나도 굉장히 고민됐는데 그냥 다 해주었다,,
2. 중복 삭제 암호 풀기
이 문제가 문제 풀이를 떠올리는데까지 가장 오래걸렸던 것 같다.
기능 구분에 따른 함수 분리도 굉장히 어렵게 느껴진 문제였다.
7개의 문제 중 내 코드가 가장 아쉽게 느껴지는 문제이다.
3. 369 게임
기능에 따라 함수의 분리는 만족스럽게 한 것 같다.
다만 이 문제를 풀 때 고민했던 것은 어떤 풀이 방식을 적용할지였다.
전체를 탐색하여 O(n)이 예상되는 풀이법과
좀 더 수학적으로 접근하여 O(1)이 예상되는 풀이법이 있었다.
후자의 경우 과정이 복잡하고 코드의 가독성이 많이 떨어질 것 같다는 생각과
O(n)도 충분하지 않을까? 하는 생각에서 전자의 풀이법을 선택했다.
4. 청개구리 사전
덕분에 코틀린으로 맵 컬렉션을 처음 사용해보았다.
맵으로 청개구리 사전을 만들고 문자를 바꾸도록 하였다.
파이썬에서 딕셔너리를 써본 기억이 어렴풋이 나서 잘 사용할 수 있었다.
5. 화폐 단위별 변환
리스트에 화폐 단위를 담아 나누었다.
그리 어렵지 않았고 특이사항도 없었다.
6. 닉네임 중복 체크
쉽지 않은 문제였다. 오랜 고민 끝에 두 가지 풀이법이 떠올랐다.
많은 시간이 드는 방법 vs 많은 공간을 사용하는 방법
고민 끝에 전자의 시간이 너무 오래걸린다고 판단하여 후자를 선택하게 되었다.
여기서 또 한번 맵을 사용해보게 되었고 집합(셋) 컬렉션도 처음 사용해보았다.
유용한 컬렉션과 컬렉션 함수들이 많다는 것을 느꼈다.
최악의 경우엔 맵의 키가 약 19만개가 생기게 되는데 아직도 이게 맞는지는 잘 모르겠다 ㅋㅋ
7. 친구 추천 기능
친구의 친구일 경우 10점 추가
타임라인을 방문했을 경우 1점 추가다.
내 타임라인을 방문했을 정도로 나한테 관심이 많은 사람인데 1점은 좀 짜지 않나~? ㅋㅋ
뭐 여튼! 이 문제는 컬렉션을 알아가는데 좀 더 큰 도움이 되었다.
if(element in collection)
위와 같은 코드를 작성했는데 처음엔 collection에 list를 사용했다.
코틀린 컬렉션에 대해 찾아보다 set을 사용하는게 list보다 더 빠를 것이라고 생각했고 set으로 바꾸었다!
또 filterIndexed, sortedWith, thenBy, map과 같은 함수들을 적용해보게 되어 좋았다.
'우아한 테크 코스' 카테고리의 다른 글
[우아한테크코스] 합격 및 온보딩 미션 후기 (0) | 2023.02.27 |
---|---|
우아한 테크 코스 최종 코딩테스트(점심 메뉴 추천) 회고 (0) | 2022.12.21 |
우아한 테크 코스 4주차(다리 건너기) 회고 (0) | 2022.12.21 |
우아한 테크 코스 3주차(로또) 회고 (0) | 2022.11.17 |
우아한 테크 코스 2주차(숫자 야구 게임) 회고 (0) | 2022.11.09 |