글또8기:개발자번역일기

글또 | 알고리즘 스터디 30일 기록

채유나 chaeyoonaaa 2023. 6. 18. 23:56
반응형

"프로그래머스 Lv1 나만 어려운건가" 회의감이 들 때였다. 알고리즘 공부 중요한 거 말해 뭐할까, 그런데 어려우니까 계속하는게 정말 쉽지 않았다. 2년차에 접어드는 데이터사이언티스트 근무에서 더이상 스스로를 "비기너"라고 내려치고 싶지 않지만, 프로그래밍 실력을 논하기엔 정말 애매한 상황이다. 그나마 SQL은 문제 풀기가 조금 수월한데 주력 언어인 파이썬으로는 주피터노트북을 벗어나 IDE 콘솔을 마주하는 것 자체가 편하지 않아 외면하고 싶었다.
 
그런데 작년 취준 당시 글로벌기업에서 인터뷰 기회가 왔을 때 형편없이 참패한 경험이 자꾸 생각났다. 면접관과 1:1 세션으로 라이브 코딩이었고 풀이 환경은 Coderpad에서 면접관이 제공하는 데이터로 풀어야 하는, 그러나 전형적인 알고리즘 유형들이었다. 씁쓸한 기억이 반복되었지만 "그래서 뭐 어쩔꺼야, 그만둘거야?" 마음으로 계속해 현 직장에 합격했다. 합법적으로(?) 알고리즘 공부를 더 하지 않아도 되어 기뻤다. 직장 생활을 시작하고 정신없이 배우기 바쁜 시기가 지나 어느 정도 일과 사람들에게 익숙해진 어느날 ... 별 생각 없이 유퀴즈 김고은 배우님 인터뷰 영상을 보다가 어떤 지점에서 외면하고 있던 내 마음이 수면 위로 다시 떠올랐다. 배우 생활을 하며 작품활동을 하는 건 결국 사람들과 함께 하는 일인데 유독 내성적인 성격 탓에 현장이 너무 어려웠다는 배우님, "그래서 뭐 어쩔꺼야, 그만둘거야? 이럴 때마다 쉴 거야?" 그렇게 계속 커리어를 이어오셨다고 한다.

 
그래서 나도 다시 알고리즘이다. 세상에 Lv5 고수들은 많고 많아서 심심하다고 코딩테스트 찾아 풀기도 하는 분들도 계신다. 그 가운데서 나는 일단 내 실력을 측정하는 것 부터 시작했다. 정답을 검색해서 찾지 않고 스스로 풀어 낼 수 있는 단계는 시간이 무제한으로 주어진다는 가정 하에서 Lv1이 한계였다. 이 상태 실력을 보다 안정적으로 다지고 Lv2를 진행하고 싶었다. 언제가 될 지 모르는 다음 인터뷰를 생각했을 때 <확실히 나오는 문제 패턴>들은 당연히 빠르게 풀어야 할 것이고 이왕 풀 수 있는 내용이라면 정해진 시간안에 완성하는 능력을 기르고 싶다.
 
 
그래서 프로그래머스 Lv1을 하루 1문제씩 뜯어보며 그 문제를 풀기 위해 필요한 개념은 무엇인지, 가장 효율적으로 풀 수 있는 방법은 무엇인지, 다른 사람에게 설명하고 가르칠 수 있을만큼 공부를 했다. 때마침 글또에서 블로그 이웃까지 연결이 된 분과 데이터 분석가를 위한 파이썬 강의 제작 기회를 잡았고 순간을 놓치고 싶지 않다는 생각에 4-5월 한달 조금 넘는 기간동안 부지런 떨었다. 아무래도 컴퓨터 공학 전공 배경을 가지지 않다보니 Big O notation 등 개념이 상대적으로 모자라 [효율적인 코드]의 정의를 내리는 것도 익숙하지 않았다.

글또 이웃분이 국내 어느 플랫폼을 통해 강의하고 계신 자료도 감사히 받아봤고, 프로그래머스에서 출간한 책도 구입해 시리즈 e-북으로 가지고 다니면서 하루 1문제에 해당하는 개념 공부를 했다. 쉽지 않았지만 어찌저찌 구글 시트를 채워 가며 진도를 나갈 수 있었다.

 
한 달동안 하루 1문제씩 풀었던 문제 목록은 아래에 링크해 두었다. 어느 정도 문제가 익숙해졌고 나만의 답이 완성되었다고 판단되었을 때, 5월 말 즈음, 반짝 스터디 번개를 열어서 문제 푼 내용을 비교하고 본인의 풀이를 설명하는 시간을 가졌다. 한번은 40분, 두번째는 1시간정도 각각 공통으로 풀어온 5문제씩을 놓고 토론하였다. 번개 모집을 할 때 사용 언어에 제한을 두지 않아 자바로 풀이하신 분과 상대했다. 풀다가 안되는 문제는 자바스크립트로 시작해서 자바로 변환하는 방식을 택하셨다고 들었다. (다음 기회가 되면 꼭 다시 페어하고 싶은 분이다. 정말 재밌게 했다🎢)

1. 자연수 뒤집어 배열로 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12932
2. 행렬의 덧셈 https://school.programmers.co.kr/learn/courses/30/lessons/12950
3. K번째수 https://school.programmers.co.kr/learn/courses/30/lessons/42748
4. 정수 내림차순으로 배치하기 https://school.programmers.co.kr/learn/courses/30/lessons/12933
5. 문자열 내림차순으로 배치하기 https://school.programmers.co.kr/learn/courses/30/lessons/12917
6. 문자열 내 마음대로 정렬하기 https://school.programmers.co.kr/learn/courses/30/lessons/12915
7. 예산 https://school.programmers.co.kr/learn/courses/30/lessons/12982
8. 약수의 합 https://school.programmers.co.kr/learn/courses/30/lessons/12928
9. 짝수와 홀수 https://school.programmers.co.kr/learn/courses/30/lessons/12937
10. 약수의 개수와 덧셈 https://school.programmers.co.kr/learn/courses/30/lessons/77884
11. 정수 제곱근 판별 https://school.programmers.co.kr/learn/courses/30/lessons/12934
12. 두 정수 사이의 합 https://school.programmers.co.kr/learn/courses/30/lessons/12912
13. 최대공약수와 최소공배수 https://school.programmers.co.kr/learn/courses/30/lessons/12940
14. 소수 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/12921
15. 최소직사각형 https://school.programmers.co.kr/learn/courses/30/lessons/86491
16. 자릿수 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/12931
17. 평균 구하기 https://school.programmers.co.kr/learn/courses/30/lessons/12944
18. X만큼 간격이 있는 n개의 숫자 https://school.programmers.co.kr/learn/courses/30/lessons/12954
19. 문자열 내 p와 y의 개수 https://school.programmers.co.kr/learn/courses/30/lessons/12916
20. 하샤드 수 https://school.programmers.co.kr/learn/courses/30/lessons/12947
21. 나누어 떨어지는 숫자 배열 https://school.programmers.co.kr/learn/courses/30/lessons/12910
22. 핸드폰 번호 가리기 https://school.programmers.co.kr/learn/courses/30/lessons/12948
23. 음양 더하기 https://school.programmers.co.kr/learn/courses/30/lessons/76501
24. 제일 작은 수 제거하기 https://school.programmers.co.kr/learn/courses/30/lessons/12935
25. 시저 암호 https://school.programmers.co.kr/learn/courses/30/lessons/12926
26. 이상한 문자 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12930
27. 문자열 다루기 기본 https://school.programmers.co.kr/learn/courses/30/lessons/12918?itm_content=course14743 
28. 문자열을 정수로 바꾸기 https://school.programmers.co.kr/learn/courses/30/lessons/12925
29. 서울에서 김서방 찾기 https://school.programmers.co.kr/learn/courses/30/lessons/12919
 
 
그리고 6월 본업이 바빠 진도를 멈추고 서 있다. 이제 다음은 무엇일까. 우선은 공부하던 방식을 어느 정도 이어가야 하지 않을까 싶다. 알고리즘 공부는 모두가 한결같이 옳은 방향이라고 말하는 것인 만큼 지속적으로 하는 게 중요하지 않을까 생각이다. 그리고 본업에 다시 여유가 생기면 (아마 이번 달 말 또는 다음달부터) 강의 제작으로 이어 가는 방식으로 공부한 내용을 정리하는 걸 택하려고 한다. To be continued ... 🙏

반응형