문제의 설명을 공격적으로 읽으며, 문제가 원하는 바를 완전히 이해하는 과정이 필요.
문제의 궁극적인 목적을 옳게 이해하더라도 사소한 제약 조건을 잘못 이해하면 풀 수 없는 문제가 있음.
문제에 답이 있다!
자신이 다루기 쉬운 개념을 이용, 문제를 자신의 언어로 풀어쓴다.
문제가 요구하는 바를 직접적으로 이해하기 위해 꼭 필요. 요구하는 바가 복잡한 문제일수록 중요성이 큼.
추상화란 현실세계의 개념을 다루기 쉬운 개념으로 옮겨 표현하는 것.
문제의 본질을 어떤 방식으로 재구성하는냐에 따라 같은 일을 수행하는 프로그램이라도 전혀 다른 문제로 받아들여질 수 있다.
어떤 부분을 추상화할 것인지를 선택하는 작업과 문제를 재정의하는 방법들에 대한 괄은 프로그래머의 영역.
문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료구조 선택.
우리가 설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는지 증명.
수행에 걸리는 시간과 사용 메모리의 문제가 제한 내에 들어가는지 확인.
계획을 잘 세워도 프로그램의 구현이 부정확하거나 비효율적이라면 프로그램은 정확히 동작하지 않음.
문제 해결에 당장 직접적인 영향은 없지만, 장기적으로 가장 큰 영향을 미침.
자신이 문제를 해결한 과정을 돌이켜보고 개선하는 과정을 말함.
효과적으로 회고를 하는 가장 좋은 방법은 무제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것.
문제의 간단한 해법과 함께 자신이 어떤 방식으로 접근했는지, 문제의 해법을 찾는데 결정적이었던 깨달음은 무엇이었는지 기록한다.
스택이란 쌓아 올린다는 것을 의미하며, 책을 쌓는 것처러 차곡차곡 쌓아 올린 형태.
후입 선출(LIFO, Last In First Out) rnwh.
top으로 정한 곳을 통해서만 접근 가능.
스택에서 top을 통해 삽입하는 연산 = push.
스택에서 top을 통해 삭제하는 연산 = pop.
큐란 줄, 혹은 줄을 서서 기다리는 것.
한쪽 끝에서 삽입 작업이, 다른 쪽 끝에서 삭제 작업이 양쪽으로 이루어진다.
삭제 연산만 수행되는 곳 = front
삽입 연산만 수행되는 곳 = rear
삭제 연산 = dequeue, 삽입 연산 = enqueue