문제 4402 · 바이트 III
구간을 번갈아 여는 출발식
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
마라톤 대회의 출발식에는 참가 번호가 1번부터 N번까지인 선수들이 한 번씩 소개된다. 진행자는 번호순으로 긴 줄을 세우는 대신, 번호가 연속한 구간을 나누어 소개 순서를 정한다. 처음에는 1번부터 N번까지의 전체 구간을 깊이 0인 구간으로 놓는다. 깊이는 구간을 한 번 나눌 때마다 1씩 증가하며, 같은 깊이에 놓인 구간에는 모두 같은 규칙을 적용한다. 선수가 한 명뿐인 구간에서는 그 선수의 번호를 바로 읽는다. 선수가 두 명 이상인 구간에서는 번호가 작은 선수들로 이루어진 앞 구간과 번호가 큰 선수들로 이루어진 뒤 구간으로 나눈다. 구간에 선수가 m명 있다면 앞 구간에는 ⌈m/2⌉명, 뒤 구간에는 ⌊m/2⌋명을 넣는다. 여기서 ⌈x⌉는 x 이상인 가장 작은 정수이고, ⌊x⌋는 x 이하인 가장 큰 정수다. 따라서 인원이 홀수라면 앞 구간에 한 명이 더 들어간다. 현재 구간의 깊이가 짝수라면 앞 구간의 선수를 모두 소개한 뒤 뒤 구간의 선수를 소개한다. 깊이가 홀수라면 뒤 구간을 모두 소개한 뒤 앞 구간을 소개한다. 각 하위 구간 안의 소개 순서도 같은 규칙으로 정한다. 어느 구간을 먼저 소개하더라도 앞 구간과 뒤 구간이라는 이름은 참가 번호의 크기로 정해지며 서로 바뀌지 않는다. 운영자는 전체 소개 명단을 인쇄하지 않고, 방송 장비를 점검할 특정 순서 하나만 확인하려 한다. N과 K가 주어질 때, 전체 소개 순서에서 K번째로 불리는 선수의 참가 번호를 구하는 프로그램을 작성한다. 순서는 1번째부터 세며, 모든 선수는 정확히 한 번 불리므로 조건을 만족하는 선수는 항상 한 명이다.
입력
첫째 줄에 두 정수 N과 K가 공백으로 구분되어 주어진다. 1 ≤ N ≤ 100,000이며, 1 ≤ K ≤ N이다.
출력
전체 소개 순서에서 K번째로 불리는 선수의 참가 번호를 정수 하나로 출력한다.
예제 입력 1
7 2
예제 출력 1
4
예제 입력 2
5 4
예제 출력 2
5
예제 입력 3
1 1
예제 출력 3
1
힌트 펼치기
- 구간의 시작 번호, 선수 수, 깊이, 찾으려는 순서를 재귀 호출의 정보로 사용할 수 있다.
- 먼저 소개하는 하위 구간의 크기와 K를 비교하면 한쪽 구간만 방문해도 된다.
관련 서재 장
알고리즘 분류
재귀분할 정복풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |