그리디 알고리즘은 단순하지만 강력한 문제 해결 방법이다.
이 알고리즘 유형은 국내 알고리즘 교재에서 단어 그래도 번역하여 '탐욕 법'으로 소개된다. 이름에서 알 수 있듯이
어떠한 문제가 있을 때 단순 무식하게, 탐욕적으로 문제를 푸는 알고리즘이다. 여기서 탐욕적이라는 말은
'현재 상황에서 지금 당장 좋은 것만 고르는 방법'을 의미한다.
코딩 테스트에서 만나게 될 그리디 알고리즘의 문제 유형은 앞으로 다루게 될 알고리즘과 비교했을 때
'사전에 외우고 있지 않아도 풀 수 있을 가능성이 높은 문제 유형'이라는 특징이 있다.
정렬, 최단 경로 등의 알고리즘 유형은 그 알고리즘의 사용 방법을 정확히 알고 있어야만 해결 가능한 경우가 많다.
그리디 알고리즘 유형의 문제는 아주 다양하기 때문에 암기한다고 해서 항상 잘 풀 수 있는 알고리즘 유형이 아니다.
사전 지식 없이도 풀 수 있는 문제도 있겠지만, 많은 유형을 접해보고 문제를 풀어보며 훈련을 해야 한다.
어떤 코딩 테스트 문제를 만났을 때, 바로 문제 유형을 파악하기 어렵다면 그리디 알고리즘을 의심하고,
문제를 해결할 수 있는 탐욕적인 해결법이 존재하는지 고민해보자.
실전문제:
1. 큰 수의 법칙 (책 92페이지)
내가 푼 답
책의 답
책의 답에서는 반복되는 수열의 규칙에 대해서 파악하고, 이를 식으로 나타내어 해결을 했다.
다음에는 이러한 수열 문제를 위와 같이 식으로 나타내어 해결해 보아야겠다.
2. 숫자 카드 게임 (책 96페이지)
내가 푼 답
책의 답
3. 1이 될 때까지 (책 99페이지):
내가 푼 답
이렇게 간단하게 풀면 시간제한에 걸리지 않을까 싶은 생각이 들었다.
그래서 책에 나와있는 시간 측정 방법으로 측정을 해보았는데, 큰 수를 넣어도 1초를 넘어가지는 않았다.
측정 방법이 잘 못 됐을 수 있지만, 여기에 대해서는 온라인 저지에서 문제를 풀 때 좀 더 정확하게
채점될 수 있기 때문에 일단 넘어가기로 했다.
책의 답:
내가 푼 방법보다 이 방법이 확실히 빠를 것이다. 가장 큰 이유는 18번째 줄 때문이라고 생각하는데,
나는 하나하나 빼서 카운트를 하지만 위의 방법에서는 일일이 빼지 않고 카운트를 해버린다.
숫자를 뺄 때, 위와 같은 방법이 더 효율적인 것을 기억해야겠다.
'Python 코딩테스트 > 이것이 취업을 위한 코딩 테스트다' 카테고리의 다른 글
다이나믹 프로그래밍(동적 계획법) (0) | 2021.09.12 |
---|---|
이진 탐색: 탐색 범위를 반으로 좁혀가며 빠르게 탐색하는 알고리즘 (0) | 2021.08.31 |
정렬 알고리즘: 선택 정렬, 삽입 정렬, 퀵 정렬, 계수 정렬, sort (0) | 2021.08.23 |
DFS/BFS: 깊이 우선 / 너비 우선 탐색 알고리즘 (0) | 2021.08.08 |
구현: 아이디어를 코드로 바꾸는 구현 (0) | 2021.07.23 |