회장 호출하기
시간 제한1초메모리 제한1024 MB
K명이 원형으로 앉은 N개 교실에서 각 교실마다 한 명씩 호출하고, 돌려받은 원형 거리의 총합을 이용해 각 반 회장의 번호를 알아내는 인터랙티브 문제이다.
문제
이 문제는 인터랙티브 문제입니다.
서울과학고에는 번부터 번까지 번호가 붙여진 개의 교실이 있고, 각 교실에는 각각 번부터 번까지 번호가 붙여진 명의 학생들이 순서대로 원형으로 둘러앉아 학급 회의를 진행하고 있다. 즉, 번 학생과 번 학생이 인접하게 앉아 있으며 (), 번 학생과 번 학생도 인접하게 앉아 있다. 각 교실마다 명의 학생 중 정확히 한 명의 학급 회장이 있다.
서울과학고의 교장 선생님께서 각 학급의 회장들만 불러모아 대의원 회의를 열고자 한다. 그런데 교장 선생님은 각 학급 회장의 번호를 모르기 때문에 다음과 같은 과정을 통해 모든 학생회장의 번호를 알아내기로 했다.
- 개의 교실에서 각각 한 명씩, 총 명을 호출한다. 이 학생들은 학생 회장이 아니어도 상관없다.
- 호출이 끝난 뒤, 이 학생들이 교실에 앉아서 회의를 할 때 학급 회장과의 거리의 총합을 알 수 있다. 이때, 각 교실 내에서 학급 회장과 호출된 학생 사이 거리는 학급 회장의 번호가 , 호출된 학생의 번호가 일 때 로 정의된다.
예컨대 교실의 수 이고, 각 교실에는 명의 학생들이 있다고 하자. 번 교실의 학급 회장은 번 학생, 번 교실의 학급 회장은 번 학생이라고 생각하자. 교장 선생님이 번 교실에서 번 학생을, 번 교실에서 번 학생을 호출한 경우 첫 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 이고, 두 번째 학급에서 학급 회장과 호출한 학생 사이 거리는 이므로, 교장 선생님은 거리의 총합인 를 되돌려받게 된다.
이제 교장 선생님을 대신해 위 호출을 이용해 각 교실의 학급 회장의 번호를 알아내는 프로그램을 작성해 보자.
제한
힌트
출력 버퍼를 비우는 방법은 다음과 같다.
- C:
fflush(stdout) - C++:
std::cout << std::flush - Java:
System.out.flush() - Python:
sys.stdout.flush()
이외의 언어에 대해서는 언어별 명세를 참고해야 한다.