[백준] 13300_방 배정 python

김동완·2022년 4월 16일
0

알고리즘

목록 보기
13/55
post-thumbnail

방 배정

문제

정보 초등학교에서는 단체로 2박 3일 수학여행을 가기로 했다. 여러 학년이 같은 장소로 수학여행을 가려고 하는데 1학년부터 6학년까지 학생들이 묵을 방을 배정해야 한다. 남학생은 남학생끼리, 여학생은 여학생끼리 방을 배정해야 한다. 또한 한 방에는 같은 학년의 학생들을 배정해야 한다. 물론 한 방에 한 명만 배정하는 것도 가능하다.

한 방에 배정할 수 있는 최대 인원 수 K가 주어졌을 때, 조건에 맞게 모든 학생을 배정하기 위해 필요한 방의 최소 개수를 구하는 프로그램을 작성하시오.

예를 들어, 수학여행을 가는 학생이 다음과 같고 K = 2일 때 12개의 방이 필요하다. 왜냐하면 3학년 남학생을 배정하기 위해 방 두 개가 필요하고 4학년 여학생에는 방을 배정하지 않아도 되기 때문이다.

학년여학생남학생
1학년영희동호, 동진
2학년혜진, 상희경수
3학년경희동수, 상철, 칠복
4학년달호
5학년정숙호동, 건우
6학년수지동건

입력

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어 주어진다. 다음 N 개의 각 줄에는 학생의 성별 S와 학년 Y(1 ≤ Y ≤ 6)가 공백으로 분리되어 주어진다. 성별 S는 0, 1중 하나로서 여학생인 경우에 0, 남학생인 경우에 1로 나타낸다.

출력

표준 출력으로 학생들을 모두 배정하기 위해 필요한 최소한의 방의 수를 출력한다.

해결방안

  • 각 성별과 학년별로 리스트를 만든다. 남자는 0~5, 여자는 6~11
  • 그리고 값을 넣어준다.
  • 빈 리스트를 제외한 리스트를 다시 만든다.
  • 리스트를 돌면서 방을 초과하면 다른 방을 추가로 만들고 넣어준다.

n ,room = map(int,input().split())

lst = list([] for _ in range(12))

cut = 6 

for i in range(n) :
    sex,grade = map(int,input().split())
    if sex==1 :
        lst[grade-1].append(1)
    else :
        lst[grade+5].append(1)
print(lst)
lst3=[]
for search in lst :
    if search==[] :
        continue
    lst3.append(search)

for search in lst3 :
    if len(search)>room :
        lst2 = []
        while len(search)>room :
            search.remove(1)
            lst2.append(1)
        lst3.append(lst2)
print(len(lst3))
profile
내가 공부한 내용들이 누군가에게 도움이 될지 몰라서 쓰는 벨로그

0개의 댓글