제목을 저렇게 지은 이유는 오늘 수업 내용이 재귀였기 때문이다. 재귀 함수를 배우는데 진짜 머리가 빙빙 돌았던 것 같다. 개념 파악은 쉬운데, 디버깅(?)이 제대로 되지 못해 힘들었다. 오늘은 코플릿 문제들만 풀었고 내일은 과제 두 개를 풀어야 한다. 재귀 함수를 총 이틀에 걸쳐 공부하는 건 조금이라도 더 개념을 익힐 수 있는 상황이기에 쌍수 들고 환영할 일이지만, 과제를 제대로 해결하기 위해서 미리 개념을 더 튼튼하게 잡아둬야할 것 같다. 오늘은 간만에 이른 시간에 블로그를 작성하는데, 작성하고 복습할 예정이다. 이번주 주말에 복습한 거 기술 블로깅할 게 많을 것 같다.
또, 오늘부터 토이 알고리즘 문제와 프로그래머스 문제 풀기를 시작했다. 지금 프로그래머스를 푸는 계획은 월~수 중으로 한 문제를 풀고, 목~일 중으로 한 문제를 푸는 것이다. 프로그래머스 푼 문제 풀이는 따로 카테고리를 만들어서 묶어야할 것 같다. 현재 프로그래머스는 level 1 부터 시작해서 추가로 Weekly 문제를 풀 예정이다. 프로그래머스는 딱히 걱정되진 않는데 토이 알고리즘 문제가 심각하다. 이거 난이도가 미쳤다. 이전에 코드 스테이츠에서 푼 알고리즘 문제들은 문제 보면 바로 어떻게 풀지 생각해낼 수 있었는데 이건 지금 손에 펜을 들고 손코딩을 해도 뭘 어떻게 해야할지 감도 안 잡힌다. 아침 9시~10시에 문제를 푸는데 아침에 잠 확 깰 수 있을 것 같다.
[ 오늘의 TODO ]
코드 스테이츠) 재귀함수 개념// 재귀 함수를 사용할 때는 언제인가?// 어떻게 하면 재귀적으로 사고할 수 있는가?코드 스테이츠) Pair-Programming// 재귀함수 코플릿- 패스트 캠퍼스) 인강 3개 이상 듣기 // optional
프로그래머스) Weekly 4주차 (월~수)생활) 물 1L 이상 마시기개선) 페어 프로그래밍할 때도 혼자 있을 때처럼 침착하게 오류 대처하기// 오늘도 침착하게 오류를 잘 해결해냈다. 페어분께서도 많은 도움을 주셔서 편하게 풀 수 있었다.

[ 오늘의 해결 ]
1. concat 은 앞에도 배열 뒤에도 배열이어야 한다.
초보적인 실수를 범했다. 배열의 내장 메소드인 concat은 배열과 배열을 합쳐주는 역할을 한다. 그렇기 때문에 concat 앞에도 배열, 뒤에도 배열이어야 한다. 그런데 내가 바보처럼 arr[i].concat(arr[i+1]) 상황이 있다고 했을 때 둘 중 하나는 배열이 아닐 수 있는데 concat으로 연결해주었다.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat
Array.prototype.concat() - JavaScript | MDN
The concat() method is used to merge two or more arrays. This method does not change the existing arrays, but instead returns a new array.
developer.mozilla.org
[ 오늘의 교훈 ]
1. 복잡하다 싶으면 손코딩, 그림 그리자
재귀 함수를 풀 때 가장 도움된 것은 구글링이 아니라 그림 그리기였다. 구글링해봤자 어차피 모른다. 왜냐하면 재귀 함수는 개념이 중요하기 보다 어떻게 쓰였고, 이게 어떤 방식으로 재귀함수가 연결될기 찾아내야 하기 때문이다.
오늘 저런 그림 총 9장 그렸다. 정사각형으로 찍어서 안 나왔지만 사진 밖에서도 굉장한 고뇌의 흔적들이 남겨져 있다. 처음에는 그림을 그리는 것도 버거웠고, 분명 내가 그렸는데도 나중에 보면 "이게 왜 이렇게 되지?" 라는 생각이 들을 때도 있었다. 알고리즘 문제에도 재귀 함수는 종종 등장한다고 하는데 지금은 일단 손코딩과 수도 코드로 한 문제를 풀더라도 정성껏 풀어야겠다
2. 재귀 함수가 힘들다 싶으면 For과 While을 떠올려라
이건 오늘 스프린트 리뷰해주신 크루님의 팁이었다. 이 얘기를 들었을 땐, 그럴바엔 그냥 For를 쓰지 왜 재귀 함수를 써? 라는 생각을 하게 됐는데, 크루님은 이렇게도 말씀하셨다.
반복문은 프로그램이 명석하게 하지만 재귀함수는 프로그래머를 명석하게 만든다.
정확하게 어떤 단어로 말씀하셨는지 기억은 나지 않지만, 의미상 통할 것 같다. 결국 재귀 함수를 계속 사용하다 보면 더 컴퓨팅적 사고에 다가간다는 말씀을 하신 것 같다고 느꼈다. 실제로 for문과 재귀 함수 둘 중에 for 문을 더 쓰기 쉽지만, 같은 로직이라도 재귀함수를 사용할 때면 머리가 한 번 더 꼬이는 것 같은 느낌을 받았다. 크루님께서는 for이나 while 로 썼던 코드들을 한 번 재귀함수로 바꿔보는 연습을 하라고 말씀하셨는데 선뜻 나서지는 못할 것 같지만, 그래도 한 두개씩은 해봐야겠다는 생각을 했다.
'코드스테이츠 > 코드스테이츠 @ 개발 일지' 카테고리의 다른 글
[코드 스테이츠] 39일차, 자료 구조 배우고 스터디 그룹 정식 활동 시작 (0) | 2021.08.26 |
---|---|
[코드 스테이츠] 38일차, "나는 할 수 있다. 정말 할 수 있다" (0) | 2021.08.25 |
[코드 스테이츠] 36일차, Section 2 탑승 후 바로 뱃멀미 (0) | 2021.08.23 |
[코드 스테이츠] 33일차, Section1 - 시작의 아름다운 마무리 (0) | 2021.08.20 |
[코드 스테이츠] 32일차, "HA 1 (2)" (2) | 2021.08.19 |