만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

제21대 국회의원 선거

시간 제한1초메모리 제한512 MB

요약
정당별 지역구 의석수와 비례대표 득표수가 주어질 때, 21대 국회의원 선거의 준연동형 규칙에 따라 정당별 총 의석수를 계산합니다.
난이도

보통10점 중 5점

유형
시뮬레이션, 정렬, 구현
정답자
아직 제출이 없습니다

문제

정당별 지역구 의석 수와 비례대표 득표 결과가 주어졌을 때, 제21대 국회의원 선거 결과로 각 정당이 얻는 총 의석 수를 계산한다. 의원정수는 300300명이며, 지역구 국회의원은 253253명, 비례대표 국회의원은 4747명이다.

비례대표 의석은 비례대표 국회의원선거 유효투표총수의 3% 이상을 득표했거나 지역구 국회의원선거에서 5석 이상을 차지한 정당에만 배분된다(봉쇄조항). 비례대표 의석을 배분받는 정당을 의석할당정당이라 한다. 제21대 국회의원 선거에 한해 비례대표 의석 배분 방식은 다음과 같다.

1단계: 30석을 전국단위 준연동 방식(연동비율 50%)으로 배분

의석할당정당마다 비례대표 국회의원선거에서 얻은 득표비율에 따라 산정한 의석수에서 그 정당의 지역구 당선인 수를 뺀다. 그 수의 50%에 이를 때까지 해당 정당에 비례대표 의석을 먼저 배분한다.

(N−R)×pi−ri2\frac{\left(N-R\right)\times p_i - r_i}{2}

(NN: 국회의원 정수, RR: 의석할당정당이 아닌 정당의 지역구 당선인 수 합계와 무소속 지역구 당선인 수, pip_i: 해당 정당의 비례대표 국회의원선거 득표비율, rir_i: 해당 정당의 지역구 국회의원 당선인 수)

pip_i는 전체 유효표에 대한 득표비율이 아니다. 의석할당정당의 득표수를 모든 의석할당정당의 득표수 합계로 나누어 다시 구한 값이다.

결과값이 1보다 작으면 0으로 하고, 그 밖의 경우에는 소수점 첫째 자리에서 반올림한다. 이렇게 구한 정수를 연동 배분 의석 수 si′s_i^\prime이라 한다.

sis_i의 합이 30이면, 이 의석 수를 47석 중 30석에 대한 해당 정당의 비례대표 의석 수 sis_i로 확정한다.

2-1단계: 연동 배분 의석 수의 합계가 30석 미만인 경우

1단계에서 배분한 의석의 합이 30석에 못 미쳐 잔여 의석이 생기면, 잔여 의석은 비례대표 국회의원선거의 득표비율에 따라 산정한 의석을 배분한다.

si′+(30−∑s′)×pis_i^\prime + \left(30-\sum s^\prime \right) \times p_i

(pip_i: 해당 정당의 비례대표 국회의원선거 득표비율)

정수 부분을 먼저 배분하고, 나머지는 총 연동 배분 의석 수가 30석이 될 때까지 소수점 이하 수가 큰 순서대로 배분한다. 이렇게 배분을 마친 각 정당의 의석 수를 47석 중 30석에 대한 조정된 비례대표 의석 수 sis_i라 한다.

2-2단계: 연동 배분 의석 수의 합계가 30석을 넘는 경우

1단계에서 배분한 의석의 합이 30석을 넘어 초과 의석이 생기면, 각 정당의 연동 배분 의석 수 비율에 따라 다시 배분한다.

30×si′∑s′\frac{30 \times s_i^\prime}{\sum s^\prime}

정수 부분을 먼저 배분하고, 나머지는 총 연동 배분 의석 수가 30석이 될 때까지 소수점 이하 수가 큰 순서대로 배분한다. 이렇게 배분을 마친 각 정당의 의석 수를 47석 중 30석에 대한 조정된 비례대표 의석 수 sis_i라 한다.

3단계: 17석을 기존 의석배분방식(병립형)으로 배분

나머지 17석은 비례대표 국회의원선거의 득표비율에 따라 산정한 의석을 배분한다.

17×pi17 \times p_i

(pip_i: 해당 정당의 비례대표 국회의원선거 득표비율)

정수 부분을 먼저 배분하고, 나머지는 17석이 될 때까지 소수점 이하 수가 큰 순서대로 배분한다. 이렇게 배분을 마친 각 정당의 의석 수를 47석 중 17석에 대한 비례대표 의석 수 tit_i라 한다.

정당 ii의 최종 비례 의석은 si+tis_i + t_i석이다. 지역구 의석 수 rir_i와 합치면, 해당 정당이 제21대 국회에서 얻는 총 의석 수는 si+ti+ris_i+t_i+r_i가 된다.

입력

첫째 줄에는 선거에 후보를 낸 정당의 수 PP와 총 투표자 수 VV가 주어진다. (1≤P≤501 \leq P \leq 50), (1≤V≤1091 \leq V \leq 10^9)

다음 PP개의 줄에는 각 정당의 정당명, 지역구 의석 수, 비례대표 국회의원선거 득표수가 주어진다. 정당명은 최대 50글자의 알파벳 소문자와 언더스코어(_)로 이루어져 있으며, 중복되지 않는다.

지역구 의석 수의 합은 253을 넘지 않으며, 비례대표 국회의원선거 득표수의 합은 VV를 넘지 않는다.

출력

정당별로 제21대 국회에서 얻은 의석 수를 의석 수의 내림차순으로 정렬하여 정당명과 함께 출력한다. 의석 수가 같으면 정당명이 사전순으로 앞서는 정당을 먼저 출력한다.

힌트

2020년 1월 14일 시행된 공직선거법(법률 제16864호)을 기준으로 한다. 다만, 아래의 예외를 적용한다.

  • 의석을 소수점 이하 수가 큰 순서대로 배분할 때, 소수점 이하 수가 완전히 같으면 기호가 더 작은 정당에 먼저 배분한다. (선거법에서는 이런 경우 추첨에 따르도록 되어 있다.)

적어도 한 정당 이상은 si′>0s_i^\prime>0임이 보장된다.

예제1

  1. 예제 1

    입력
    5 24430476
    redshift 105 7960272
    deobureo_minkyu_party 110 6069744
    i_might_be_accepted 25 6355572
    justice_hui 2 1719891
    god_fan 0 626853
    
    예상 출력
    deobureo_minkyu_party 115
    redshift 111
    i_might_be_accepted 52
    justice_hui 11
    god_fan 0