TIL
[클라우딩 어플리케이션 엔지니어링 TIL] - DAY 16
blackmilktea
2024. 5. 7. 23:30
알고리즘 공부하는 법
문제를 풀 때 중요한 것
- 여러 가지 풀이 방법이 있을 수 있으므로 다양한 방식으로 문제에 접근.
- 항상 예외가 있을 수 있음. 반례 생각해 보기.
- 풀어낸 답이 베스트인지 고민하고, 더 효율적인 풀이 찾기.
- 시행착오를 기록하기. 다른 비슷한 문제가 나와도 접근하기 쉬워짐.
- 풀었더라도 다른 사람 코드 살펴보기, 생각하지 못했던 방법을 발견할 수 있음.
- 쉽게 포기하지 않기. 그러나 알고리즘을 모르면 아예 못 푸는 문제도 있고, 시간이 너무 오래 걸리거나 도저히 못 풀겠다면 답을 보는 것도 방법
재밌게 공부하는 법
- 시각적인 사이트의 도움
- 자료구조, 알고리즘을 공부할 때 어디에 응용될 수 있는지 생각해 보면서 공부하기
마음가짐
- 코테는 문제 해결 능력을 확인하는 것이므로 알고리즘 마스터가 될 필요는 없음.
- 논리적 사고와 그걸 코드로 표현하는 구현력에 중점을 두고 공부
- 따라서 어디까지 공부할지 정하는 것이 중요
코딩 테스트 잘 보는 법
성향 파악하기
- 스스로가 어떤 사람인지 알아야 함. 자신에게 맞는 스타일로 코딩
메모하기
- 코테 중엔 긴장할 수 있기 때문에 코드에 주석을 달거나 노트에 메모하면서 풀기
- 알고리즘은 논리적으로 표현이 가능하기 때문에 순서도를 그리면서 정리
디버깅
- 처음부터 완벽하게 코딩할 수 없기 때문에 디버깅은 필수적
- 문제가 발생하면 머릿속으로만 고민하지 말고 출력값 바로바로 확인
익숙해지기
- 문제를 잘 읽는 것에 익숙해져야 함.
- 시간복잡도 계산하기
- 엣지 케이스 생각하기
좋은 코드 작성 방법
간결하고 가독성 좋은 코드
- 변수, 함수의 이름을 잘 정하기
- 중복 코드 제거
- 함수형 프로그래밍 이용. map, filter, reduce와 같은 고차함수 이용하기
가지치기
- 백트래킹과 같은 알고리즘에서 사용되지만 그 외 알고리즘에서도 중요
- 성능이 크게 개선되지 않더라도 코드 리뷰에서 좋은 평가를 받을 수 있음.
자바스크립트를 잘 이해하고 사용
- 자바스크립트로 코딩 테스트를 본다면 문법을 잘 활용해야 함.
- 구조 분해 할당, Spread 오퍼레이터 등
일관성 유지
- 잘 짰더라도 일관성 없는 코드보다 조금 더러워도 일관성 있는 코드가 좋음
- var와 let을 혼용하거나 snake_case와 camelCase 혼용하지 않도록 주의
- 변수명, 함수명의 일관성 유지
코딩 테스트 강의가 시작됐다. 자료 구조와 여러 알고리즘의 기초적인 부분에 대해서 다시 복습하며 학부생 때 알고리즘 문제풀이 수업 조교를 하던 게 생각났다. 그때 느꼈던 것들이 이번 강의에서 설명하신 알고리즘 공부하는 법과 어느 정도 일맥상통 하는 부분이 있다.
특히 정답을 맞혀도 다른 사람의 코드를 보며 생각을 넓히는 것. 이건 정말 많이 실감했다.
실습수업을 진행하면서 다른 사람의 코드를 볼 기회가 많았다. 생각지도 못한 방법으로 푼 것을 보며 감탄하기도 했고, 논리적으로 문제가 없어 보이는 코드가 왜 통과하지 못하는 것인지 파악해서 설명해줘야 할 때도 있었고, 수강생이 자신의 코드가 제출에 성공했음에도 통과되면 안 되는 반례 케이스에 대해 제시하는 경우도 있었다. 이렇게 타인의 코드를 보며 의견을 나눠보는 경험은 코드를 분석하며 새로운 생각이나 지식을 수용하는 능력에 큰 도움이 되는 것 같다.
그리고 추가적인 공부 방법으로 다른 사람에게 나의 지식을 전달하고 이해시키는 것도 굉장히 도움이 많이 된다.
여기서 핵심은 내가 아는 것을 그저 쏟아내는 것이 아니라 상대가 모르는 것을 파악하고 알려주는 것이다. 이렇게 접근하면 스스로의 지식을 재구성하면서 자세한 설명과 비유를 통해 상대방이 모르는 부분을 쉽게 이해시키려고 노력하기 때문에 내가 정말 제대로 알고 있는 것인지 자신을 점검해보게 되고, 상대방이 이해하지 못하면 나의 전달 방식을 뒤돌아보며 학습할 수 있기 때문이다.