Pizzaroot [910637] · MS 2019 · 쪽지

2021-09-14 02:13:34
조회수 263

수능 알고리즘 1화

게시글 주소: https://orbi.kr/00039544566

알고리즘을 공부하면서 이 알고리즘을 수능에 적용해보자는 생각이 들었다.


컴퓨터와는 다르게 수능에서 쓸수있는 연산은 훨씬 오래 걸린다.


예를 들어, 컴퓨터는 무언가를 기억하기 위해 메모리에 저장을 하면 되지만 사람은 종이에 글씨를 써야한다.


하지만 글씨를 쓸 종이가 무한하지 않으므로, 최대한 적게 쓰면서 문제를 풀어나간다.


이는 메모리 공간을 적게 차지하는것을 뜻한다.


또한, 수능에서 시간제한이 있는것은 최대한 효율적으로 문제를 풀어나가는 알고리즘만이 해결할 수 있다.


그렇다면 먼저 시간 복잡도를 정의 해보자.


글자 1개를 쓴다 = 330ms/1KB

눈으로 글자 한개를 읽는다 = 80ms/0KB


이정도 정의만해도 국어 문제에 적용 할 수 있다.


국어 문제를 푸는 방법에는 크게 지문을 읽고 문제를 푸는 방법과 문제를 읽고 지문을 푸는 방법이 있다.


이번 화에서는 지문을 읽고 문제를 푸는 방법을 알아보자.


지문의 글자수를 N이라고 할 때, 먼저 지문을 읽는데 걸리는 시간은 80 * N ms로 나타낼 수 있다.


지문을 모두 이해 했다면, 1번 문제로 가서 문제를 읽는다. 이때 이 문제의 내용을 기억할 확률을 p라고 하면


(1-p)의 확률로 지문으로 다시 돌아가야 한다.


이때는 문제에서 요구하는 부분을 찾는데 이분탐색 알고리즘을 사용할 수 있다.


그러나, 이분탐색 알고리즘은 정렬된 데이터에 사용가능하다. 즉, 어떤 부분을 읽고 내가 원하는 부분은 그 앞인지 뒤인지를 알아야 한다. 지문을 먼저 읽었으므로 그정도는 알것이라고 생각한다.


이분탐색의 시간 복잡도는 O(logN). 정확한 시행 횟수로는 log2 N이다.


다시 정리하면, 총 시간은 [N + {(1-p) * (log2 N)}^(3~5)] * 80 ms로 나타낼 수 있다.


따라서 시간 복잡도는 O(N)이다.


다음 화에서는 문제를 읽고 지문을 푸는 방법을 알아볼 것이다,

0 XDK (+0)

  1. 유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.