본문 바로가기

TIL

Day56(코딩테스트 공부법)

오늘 갑자기 문득 어제 다른 기수분들이 홀맨님에게 상담 받던 중 코딩테스트 대비에 대해 질책 받고 개선하는 방향에 대해 얼핏 들었던 것이 기억나 내가 평일에 매일하는 코딩 테스트 시간을 나에게 도움이 되도록 시간을 보내는지에 대해서 생각해봤다.

생각의 결과는 그냥 대충 시간을 할애하고 있다는 것이다.

그래서 홀맨님에게 코테 공부법에대해 질문을 하였고 홀맨님의 답변은 코테 6개월안에 정복에 올라온대로 매일 빠짐없이 가이드를 지켜 훈련하는 것이다.

자리에 돌아와 다시 확인했다. 내가 가이드를 따르고 있는지. 역시나 따르지 않고 있었다. 분명 이런 가이드를 알고는 있었지만 따르지 않았다. 그렇기에 지금까지 코테 연습은 나에게 도움이 되지 않았다.

문제점을 알았으니 이제부터 해결방법을 찾고 해결해보자.

해결방법은 정말 간단하다.

매일 가이드를 따라 문제를 풀고 정리하는 것이다.

가이드는 아래사항과 같다.

1. 이해

딱딱하게 모두 지킬 필요는 없습니다만 아래의 질문에 대한 답변이 녹아 있어야 합니다.

  • 모르는 것은 무엇인가?
  • 주어진 것은 무엇인가?
  • 자료는 무엇인가?
  • 조건은 무엇인가?
  • 조건은 알아내야 하는 것을 찾는데 충분한가?

2. 계획

계획을 세우기 전에 아래와 같은 질문을 던지면 굉장히 유용합니다.

  • 관련된 문제를 알고 있는가?
  • 모르는 부분이 유사한 다른 문제를 풀어 본 적이 있는가?
  • 전에 풀어 본 문제를 활용하려면 어떤 보조 요소를 도입해야 되는가?
  • 도움이 될 것 같은 어떤 사실이나 정리를 알고 있는가? (보통은 자료 구조나 수학적 공리 또는 정의가 해당될 겁니다.)

계획을 세운 뒤 아래 질문을 통해 한번 더 점검합니다.

  • 자료와 조건은 모두 활용 했는가? (Edge case가 될 조건을 꼭 확인합니다. 보통은 이걸 놓쳐서 지옥에 빠지죠.)

3. 실행

코딩을 하는 단계입니다. 물론 Test case부터 먼저 작성 해야겠죠?

  • 각 단계가 올바른지 명확히 알 수 있는가?
  • 그것이 옳다는 것을 설명할 수 있는가?

질문을 보면 아시겠지만 이게 TDD를 같이 하는 이유입니다.

Test code를 통해 각 단계가 올바르게 동작하는 것을 증명할 수 있기 때문입니다.

사람의 머리로는 증명할 수 없습니다. 명심하세요! 증명은 코드를 통해 합니다.

4. 반성

반성이 제일 중요합니다. 반성한 부분을 다음날 훈련에 반영합니다.

  • 다른 방법으로 해결할 수는 없었는가? (다른 사람의 풀이도 참고하면 좋습니다.)
  • 결과나 방법을 다른 문제에 활용할 수 있는가? (유용한 패턴은 계속 써먹을 수 있죠.)

 

주말에는 한 주동안 한 것에대해 다시 생각해보고 다른 방법으로 풀어보는게 좋겠다.

 

TIL을 쓰는 순간만 다짐하는 것이 아닌 매일 실천으로 옮기자. 나는 할 수 있다.