카테고리 없음
이진탐색 알고리즘
JoyYellow
2022. 8. 6. 10:00
오늘의 스터디 첫 문제는 숫자카드2였다.
풀면서도 음...왠지 이건 아닌거 같은데 라는 강한 예감이 들었는데 맞았다. 시간초과가 난다.
이중 반복문을 써서는 절대 해결할 수 없는 문제이다.
두번째로 사용한 방법은 딕셔너리로 숫자카드에 적힌 정수의 개수를 배열로 미리 정리해놓고 가져다 쓰는 방식이다.
이 방식은 메모리 초과가 발생했다.
어떤 알고리즘으로 접근해야할지 잘 모르겠어서 빠른 검색을 했다.
참고가 될만한 좋은 블로그가 있어 내 식대로 블로그를 이해한 내용에 대해 서술하겠다.(참고:https://yhwan.tistory.com/10)
일단, 해당 블로그에서는 이진탐색과 Lower bound, Upper bound를 사용하라고 한다.
이진탐색
https://www.youtube.com/watch?v=IfIuG95RH0o
대략 요약하면,
여러개의 숫자가 카드가 뒤집어져있을 때 카드를 모두 뒤집어보지 않아도 효율적으로 몇 개의 카드만 뒤집어 내가 원하는 숫자카드를 찾는 방법이다.
방법: 7개의 숫자카드 중에 45가 적힌 카드를 찾아보자.
- 7개의 숫자카드를 오름차순 또는 내림차순으로 정렬한다.
- 처음에는 1번 카드부터 7번 카드까지 전부 검색 범위가 된다.
- 검색 범위에서 중간에 위치한 카드(4번 카드)를 확인해보면 41이 나온다.
- 45보다 41이 크다면 1, 2, 3번 카드는 찾는 값보다 당연히 작다.
- 그러므로 검색 범위에서 1, 2, 3, 4번 카드는 제거하고 5, 6, 7번 카드만 다시 탐색한다.
- 이번에는 6번 카드를 확인해보자.
- 6번카드가 45가 나와서 내가 찾는 값과 동일하다.
위의 이진탐색과 Lower bound, Upper bound를 사용하여 숫자카드2를 풀어보자.