728x90

문제)

 단대소고(단국대학교부속소프트웨어고등학교)에서 운동회를 하고 있다. 운동회는 팀 대항 대회로 진행된다. 운동회에는 총 N팀이 참여하였으며, 각 팀은 M명의 인원으로 구성되어 있다. 운동회는 한 라운드가 끝날 때마다 남은 모든 인원 중 한 명이 임의로 탈락된다. 팀의 모든 인원이 탈락한다면 그 팀은 탈락하게 된다. 각 팀의 최종 등수는 팀이 탈락된 순서의 역순으로 정한다. 가장 늦게 탈락한 팀이 운동회의 최종 1등이 된다. 이렇게 운동회가 진행되어 남은 사람이 총 a명, 준혁이의 팀에서 남은 인원은 K명이 되었다. 이때, 준혁이는 자신의 팀이 지금 가질 수 있는 등수의 범위가 궁금해졌다.

 준혁이의 팀이 지금 가질 수 있는 등수는 (준혁의 팀을 제외한 남아있는 팀의 수 + 1)과 같다.

  N, M, a, K가 주어질 때 준혁이의 팀이 지금 가질 수 있는 등수의 최댓값과 최솟값을 구해보자.

 

입력)

 첫째 줄에 N,M,a,K가 공백으로 구분되어 입력된다. (1≤N,M≤109,1≤a≤N×M,1≤K≤M,K≤a)

 

출력)

 첫째 줄에 준혁이의 팀이 가질 수 있는 등수 중 가장 숫자가 큰 값과 가장 작은 값을 공백으로 구분하여 출력한다.


N, M, a, K = map(int, input().split())
print(min(a-K+1, N), (a-K)//M + ((a-K)%M != 0) + 1)

풀이 :

 우선 등수 중 가장 숫자가 큰 값은 (남은 인원) - (준혁이네 팀원)의 숫자가 전체 참가팀의 수보다 큰지 작은지에 따라 결정된다.전체 참가팀의 수보다 준혁이네 팀을 제외한 남은 인원이 많다면 팀당 최소 한명씩은 생존했다는 가정하에 준혁이네 팀은 꼴찌(N등)을 하게 된다. 반대로 전체 참가팀 보다 준혁이네 팀을 제외한 남은 인원이 적다면 마찬가지로 팀당 한명씩 생존 했다는 가정하에 a-k+1등을 하게된다.

 가장 작은 값은 준혁이네 팀을 제외한 남은인원들이 모두 팀 전원 생존했다는 가정하에 (a-K)//M + ((a-K)%M != 0) + 1) 등을 하게된다.

 

+ Recent posts