나쁜 멀티태스킹
면접 대비시간 제한2초메모리 제한1024 MB
큐의 맨 앞 작업이 매초 최대 b번 연산을 수행하고, 끝나지 않으면 뒤로 갑니다. 첫 번째 작업이 끝나는 초를 구합니다.
문제
세상을 구하는 일은 쉽지 않아서 곳곳에서 문제가 생긴다. 이번에도 에그시는 포피 애덤스의 사무실에 들어갔다가 곤경에 빠졌다. 화면에 포피가 나타나 요원이 너무 예측하기 쉽다고 말했다. 자신은 언제나 몇 걸음 앞서 있다는 것이다. 그녀가 퍼뜨린 바이러스의 해독제를 없애는 프로그램은 이미 실행되었고, 아무도 멈출 수 없다. 세상은 곧 멸망한다.
그러나 에그시는 최고의 비밀 조직 요원이라 곧바로 노트북을 꺼내 파괴 프로그램이 돌아가는 서버의 IP 주소를 알아내고 해킹했다. 알고 보니 그곳은 포피의 개인 컴퓨터였고, 그녀는 컴퓨터에 익숙하지 않았다. 그녀의 운영체제 MS ADOS는 병렬 실행을 지원하지 않아서 모든 프로그램이 하나의 스레드에서 실행된다. 이를 위해 실행 대기 큐가 유지되며, 1초마다 큐의 첫 번째 작업이 실행된다. 1초 동안 프로그램은 최대 번의 연산을 수행할 수 있다. 프로그램이 필요한 연산을 모두 마치면 큐에서 제거되고, 마치지 못하면 큐의 맨 뒤로 옮겨져 나중에 이어서 실행된다.
에그시의 존재가 들통나 서버 비밀번호가 바뀌었고, 그는 서버에 더 접근할 수 없게 되었다. 그러나 그 전에 파괴 프로그램을 끝내는 데 번의 연산이 필요하다는 것과, 큐에 번의 연산이 필요한 다른 작업 개가 추가되어 있다는 것을 알아냈다. 이제 그는 파괴 프로그램이 끝나기 전에 포피에게 도달할 시간이 얼마나 남았는지 알고 싶어 한다. 파괴 프로그램이 종료되기까지 걸리는 초를 구하라.
입력
첫 줄에는 서버에서 실행 중인 프로그램의 총 개수 과 서버가 1초 동안 수행할 수 있는 최대 연산 수 가 주어진다 (, ).
다음 줄에는 큐에 놓인 순서대로 파괴 프로그램과 에그시가 추가한 프로그램의 연산 수 가 개 주어진다 ().
출력
파괴 프로그램이 종료되기까지 걸리는 초의 수를 한 줄에 출력한다.
힌트
두 번째 입력 예의 초별 진행은 다음과 같다.
- 1초: 첫 번째 프로그램(파괴 프로그램)이 실행되어 2번의 연산을 하고, 큐의 맨 뒤로 옮겨진다.
- 2초: 두 번째 프로그램이 실행되어 2번의 연산을 하고 종료되어 큐에서 제거된다.
- 3초: 세 번째 프로그램이 실행되어 2번의 연산을 하고, 큐의 맨 뒤로 옮겨진다.
- 4초: 네 번째 프로그램이 실행되어 1번의 연산을 하고 종료되어 큐에서 제거된다.
- 5초: 첫 번째 프로그램(파괴 프로그램)이 실행되어 2번의 연산을 하고, 큐의 맨 뒤로 옮겨진다.
- 6초: 세 번째 프로그램이 실행되어 2번의 연산을 하고, 큐의 맨 뒤로 옮겨진다.
- 7초: 첫 번째 프로그램(파괴 프로그램)이 실행되어 2번의 연산을 하고 종료되어 큐에서 제거된다.
그 이후의 프로그램 동작은 중요하지 않다. 보다시피 파괴 프로그램은 7초 후에 종료된다.