공부/알고리즘 공부

종만북 2단원 문제 해결 개관 내용 정리

냥냥냥냥냥냥 2022. 6. 8. 18:30

안녕하세요 개발자 도도 입니다

종만북 1회독 해보기 첫 번째 시간입니다 ㅎㅎ

 

2단원 내용을 좀 정리해볼까 합니다 

시작해보겠습니다!

 

 

 

문제 해결 과정

 

프로그래밍 대회를 위한 여섯 단계 문제 해결 알고리즘


1) 문제를 읽고 이해한다

저 또한 알고리즘 시험을 치거나 할 때 항상 문제를 잘못 읽거나, 문제에 주어진 예시나 설명사항을 다 읽지도 않고 성급하게 코딩부터 시작했다가 한참 뒤에 문제를 잘못 읽어서 해당 시험을 포기 했던 때가 많습니다.

종만북에서도 강조하듯 문제를 항상 꼼꼼히 다 읽고 이해한 다음에 문제를 풀어도 늦지 않습니다

잘못 이해해서 예외 케이스들 하나씩 막기 시작하면 나중엔 결국.....

 

 

2) 문제를 익숙한 용어로 재정의한다 (재정의와 추상화)

세상에 완전히 똑같은 문제는 없는 법이죠. 주어진 예시나, 문제의 키워드들이 생소한 부분이라면 최대한 내가 아는, 익숙한 용어로 생각을 하여야 쉽게 이해하고 정확하게 이해할 수 있는 건 당연한 얘기입니다

 

 

3) 어떻게 해결할지 계획을 세운다

이 부분이 실제적으로 이제 중요한 부분으로 보이는데,

어떤 자료구조를 쓸 지, 어떤 알고리즘으로 문제를 풀지를 고민을 해야하는 부분입니다

 

 

4) 계획을 검증한다

저 또한 항상 명심하는 부분이지만 손으로 먼저 몇 개의 케이스를 생각해보면서 지금 내가 짤 코드 부분의 로직이 가능한가? 에 대한 검증이 필요합니다 

막상 머리 속으론 "그래! 이렇게 짜면 되겠지" 하면서 키보드에 손을 얹어서 막 코딩을 시작해봤자 나중에 되면 내가 뭘 짜려고 했는지 혼동이 오는 시점이 저는 종종 오더라고요 ㅎㅎ

그리고 항상 알고리즘 문제를 풀고 나면 마지막 한 두 예외 케이스가 머리를 아프게 합니다

물론 예외케이스를 처음부터 다 고려할 수 있으면 정말 좋겠지만, 이 때에 놓친 예외케이스가 항상 당락을 결정하더라구요ㅜ

최대한 손으로 검증을 많이 해보는 게 좋은 거 같습니다

 

 

 

5) 프로그램으로 구현한다

아무리 좋은 알고리즘 아이디어가 있어도 코딩을 직접 할 수 없으면 무용지물 이겠죠 ㅜㅜ

꾸준한 연습만이 살 길입니다

 

 

6) 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

 

이 점은 저도 잘 놓치는 부분이지만, 푼 문제라고 지나가지 말고 항상 더 나은 방법이 있는지 고민을 해보는 게 필요한 거같아요 ㅎㅎ

 

종만북에서 알려주는 팁은 아래와 같습니다

 

1) 문제를 풀 때 마다 코드와 함께 자신의 경험을 기록으로 남긴다

- 문제의 간단한 해법, 어떤 방식으로 접근했는지 그리고 문제의 해법을 찾는 데 결정적이었던 깨달음을 남김

 

2) 맞추지 못한 경우는 오답 원인도 남긴다

 

3) 같은 문제를 해결한 다른 사람의 코드도 확인한다

 

 

 

문제를 풀지 못할 때

일정 시간이 지나도록 고민해도 답을 찾지 못할 때는 다른 사람의 소스 코드나 풀이를 참조한다

단, 다른 사람의 코드나 풀이를 참조 할 때는 반드시 복기를 동반해야한다