티스토리 뷰
이 글은 종만북 2장에 대해 다루겠습니다. 전체적인 내용은 종만북을 정리하였으나 제 개인적인 경험 및 추측이 포함되어 있습니다. 내용 상의 오류가 있을 수 있으니 발견 시 댓글로 꼭 말씀해주세요! 시작해볼까요?
문제 해결 과정
1단계 : 문제를 읽고 이해하기
많은 대회 참가자들이 가장 많이 하는 실수는 문제를 잘못 읽는 것이라고 합니다. 따라서 문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 과정이 반드시 필요합니다. 저 같은 경우만 해도 문제를 잘못 읽어 코드를 처음부터 짠 경험이 한 두번이 아닙니다.
2단계 : 재정의와 추상화
재정의는 쉽게 말해 자신의 언어로 문제를 이해하는 것이고 추상화는 현실의 문제를 수학적/전산학적 개념으로 옮겨 표현하는 과정입니다. 가만히 생각해보면 우리는 문제를 풀 때 항상 추상화를 하죠? 가령 카카오2020 인턴 1번 문제의 경우 전 경로 찾기로 문제를 추상화 했죠. 다른 사람은 BFS가 아닌 다른 방법으로 풀었을 수도 있습니다. 그러면 사람마다 추상화를 한 방법이 다른 것이고, 이 추상화한 결과에 따라 문제 풀이의 방식이 달라지므로 전혀 다른 문제로 인식될 수 있습니다. 그래서 이 추상화 과정이 프로그래밍의 방향성을 결정한다고 볼 수 있습니다.
3단계 : 계획 세우기
전 이 부분을 읽으며 많이 반성했던 것이 2단계 까지는 지키는 것 같은데, 계획 세우기와 검증의 단계를 거치지 않고 바로 수행을 해왔기 때문입니다. 계획을 세우는 단계에서는 문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료구조를 선택합니다. 아마 고난이도의 문제를 풀어야 할 수록 중요한 단계가 되겠죠?
4단계 : 계획 검증하기
계획의 검증 단계에서는 총 3가지를 확인해야 합니다. 1) 계획이 요구 조건들을 정확히 수행하는가 2) 얼마나 걸리는가 3) 메모리를 얼마나 사용하는가. 이 3가지가 모두 문제가 제시한 범위 내에서 작동해야 합니다.
5단계 : 계획 수행하기
6단계 : 회고하기
장기적으로 보았을 때 큰 도움이 되는 부분이 이 '회고하기' 단계라고 합니다. 풀어본 문제라도 다시 풀어보아야 하는 이유는 다시 풀 때 더 간결한 코드를 작성한다거나 더 효율적인 알고리즘을 쓸 수 있고, 같은 알고리즘을 쓰더라도 더 직관적인 방법을 찾을 수도 있기 때문입니다. 효과적인 회고의 방법은 문제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것입니다. 이 책 때문인가요, 그렇게 많은 알고리즘 해결 블로거들이 있는게?ㅋㅋㅋ 이때 그냥 코드만 올리는 것이 아니라, 간단한 해법, 접근 방법 그리고 문제의 해법을 찾는 데 결정적이었던 깨달음도 함께 적으면 더 좋습니다.
만약 한 번에 해결하지 못한 문제가 있다면 오답 원인도 꼭 적는 것이 좋습니다. 자신의 약점을 파악하여 앞으로의 실수를 줄이기 위함입니다.
또 다른 좋은 방법은 같은 문제를 다른 사람들은 어떻게 해결했는지, 다른 사람들의 코드를 보는 것입니다. 물론 타인의 코드를 읽고 이해하는 것이 쉽지는 않지만, 새로운 관점을 읽었을 때 나는 생각치 못한 통찰을 얻을 수도 있습니다.
문제 해결 전략
앞으로 제시 될 문제 해결 전략은 문제를 못 풀 때 다양한 방법을 취하며 답안을 구하기 위해 사용하면 됩니다.
'SUEATY > 기록' 카테고리의 다른 글
부스트캠프 — 멤버십 학습스프린트 회고 (5) | 2020.12.30 |
---|---|
부스트캠프2020 D+4 (2) | 2020.07.31 |
부스트캠프2020 D+3 (0) | 2020.07.29 |
부스트캠프2020 첫 날 (0) | 2020.07.28 |
부스트캠프 5기 합격 후기(와 '나는 이랬다' Tip) (15) | 2020.07.19 |
- Total
- Today
- Yesterday
- 졸업작품
- 삼성소프트웨어아카데미
- 부스트캠프
- 소프트웨어역량시험
- 컴공졸작
- 코테
- OS
- 부스트캠프2020
- 소프트웨어아카데미
- 알고리즘
- ios
- 프로그래머스
- 코딩테스트
- nosql
- 컴과졸작
- firebase
- swacademy
- 인턴
- 개발자인턴
- 운영체제
- RxSwift
- 컴퓨터공학
- 부캠
- 데이터분석
- 삼성
- 커넥트재단
- TableView
- C++
- SWIFT
- 보안
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |