모든 문제를(코딩테스트) 풀 때는 '설계'단계가 가장 중요하다. 설계를 대충하고 바로 구현으로 들어가면 화면상에 타이핑되는 코드는 빠르게 완성되어가는 것처럼 보일지 몰라도, 결국 정답과 근접한 코드는 아닐 수 있다.
따라서 차라리 시간이 좀더 걸릴지라도, 문제의 정답과, 그것을 어떻게 구현할지를 '설계' 단계에서 100% 완성한 다음에 코드 타이핑은 단지 정답을 제출하기 위한 용도라고 생각하자.
실제로 설계 단계에서 구현할 때 어떤 문법을 써서 해당 부분을 구현할지 까지 설계해두면 실제 구현을 할 때 헷갈릴 일도 없고, 변수 등까지 정해두고 시작하는 것이 좋다.
문제 중에서도 '시뮬레이션' 유형을 풀 때 설계가 유난히 더 중요한데, 시뮬레이션 문제는 일단 문제가 요구하는 일종의 세계관(?)이 굉장히 크다. 하나의 알고리즘을 알고 있다고 해서 풀리는 문제 유형이 아닌 일단 문제가 요구하는 행위(?)를 머리속으로 컴퓨터에게 어떻게 명령을 내릴지가 그려져야하고, 그 명령을 할 수 있다는 전제하에 좀 더 효율적인 알고리즘을 떠올리는 것이 관건인 문제이다.
따라서, 시뮬레이션 문제를 풀 때는 정말 세밀한 부분까지 '설계'를 해두는 것이 좋다.
마지막으로, 개인적인 생각이지만 시뮬레이션 문제는 '한번에' 정답을 맞추는게 맞는 것 같다. 모든 문제가 마찬가지일지는 모르지만, 만약 설계를 모두 한 뒤에 코드를 타이핑해서 테스트 케이스를 돌려봤는데, 결과가 원하는 결과가 아니라면, 그 방대한 설계를 다시 훑어봐야하는 상황이 오고, 실제 코딩테스트라면 일명 '멘붕'에 빠질 가능성이 높다.. 그래서 웬만하면 시간을 좀더 써서라도 완벽주의적 설계를 체화시키자.