당니의 개발자 스토리

1주차 개념 #10. 구현과 문제를 푸는 방법의 기초 본문

1주차 개념 #10. 구현과 문제를 푸는 방법의 기초

이번에는 구현, 그리고 문제를 푸는 기초에 대해서 얘기를 해보도록 할게요.

사실 구현은 아주 쉬운 알고리즘입니다. 말그대로 문제 그대로 구현을 하면 됩니다. 예를 들어서 배열을 회전하라 or 스택에 넣어라 이러면 말그대로 rotate 함수를 사용하고 stack.push 등을 하면 되는 것입니다.

근데 습관이 안 되면 어려울 수가 있어서 한 가지 예시를 들어볼게요.

이렇게 하면 어떻게 해야될까요?

이런 식으로 문제를 복붙해서 주석을 다세요.

그래서 차례대로 이렇게 하면 되는 거예요.

잘 나옵니다. 이 문제는 쉬운 문제인데 어려운 문제라도 지금 했듯이 주석을 달고 차근차근 구현을 하시면 쉽게 하실 수 있습니다.


문제를 푸는 방법에서 조언을 드리고자 하는데,

문제를 어떻게 풀까요?

여기서 중요한 점은 코드를 바로 작성하지 말라는 거예요. 초보자들이 실수 하는 이유 중에 하나는 코드를 바로 짜려고 해요.

그러지 말고, 문제를 조금 더 잘 보세요.

문제의 최대, 최소 범위를 잘 보고 지문을 해석해서 단계적으로 어떻게 로직을 짤 것인지 그려보고, 손코딩 하면서 for을 써야겠네, map을 써야겠네 등등 생각을 하고 들어가라는 거예요.

예시를 들어볼게요.

1. 최대, 최소 범위를 파악합니다.

-> 최소가 N이 3이고, 최대가 M이 8이죠.

2. 단순 구현이라면 구현하자.

-> 문제에서 주어진 지문대로 구현하면 되는 문제라면 그냥 구현을 해요.

3. 무식하게 풀 수 있다면 무식하게 풀자.

-> 이건 뭐냐면, 지금은 안 배웠지만 완전탐색이라는 게 있어요. brute-force 라는 알고리즘이 있어요.

brute-force로 풀 수가 없으면, Greedy DP 최단거리 알고리즘 등을 생각을 해야된다는 거예요. 무식한 방법(brute-force)으로 해보고 안되면 그때 들어가자는 거예요.

4. 아니라면 다른 알고리즘을 생각하자.

-> 위의 내용과 같습니다.

5. 제출하기전, 반례를 항상 생각하자.

-> 그리고 제출 하기 전에 테스트케이스가 맞았다고 해서 바로 제출하지 마시구요. 반례가 있는지 한번쯤은 생각하셔야 돼요.

기업마다 다르긴 하지만,

테스트케이스가 세 개가 주어지면, 이 세 개를 맞추고 바로 제출하는 학생이 있어요. 이렇게 하지 말라는 거예요.

문제에서 주어진 테스트케이스가 외부 테스트케이스라고 하고, 제출하면 돌아가는 게 내부 테스트케이스라고 하거든요.

이게 좀 달라요. 외부 테스트케이스가 맞았다고 해서 내부 테스트케이스를 맞출 확률이 100%가 아니예요.

그러니까 코테에서는 예제가 맞았다고 해도 반례가 있는지 먼저 확인해보는 습관을 들여야 됩니다.

그리고 제출하는 거죠. 그러면 실수가 방지되고 크게 시간적으로 절약이 됩니다.