파이썬 알고리즘

[파이썬] 백준 13300 방배정 풀이

뜻 지, 깨달음 오 2022. 9. 25. 11:23

https://www.acmicpc.net/problem/13300

 

13300번: 방 배정

표준 입력으로 다음 정보가 주어진다. 첫 번째 줄에는 수학여행에 참가하는 학생 수를 나타내는 정수 N(1 ≤ N ≤ 1,000)과 한 방에 배정할 수 있는 최대 인원 수 K(1 < K ≤ 1,000)가 공백으로 분리되어

www.acmicpc.net

 

2차원 버켓을 활용한 문제는 처음이었던 것 같다.

그 생각만 했으면 시간을 훨씬 더 단축했을텐데....!!

 

일단 input을 다 받아오고,

y축은 성별, x축은 학년별 분류가 되게끔 bucket을 만들었다.

0학년은 없으니까 x축 길이에 유의하기~!

student_total, room_total = map(int, input().split())
students = [list(map(int, input().split())) for _ in range(student_total)]
bucket = [[0]*7 for _ in range(2)]


for i in range(len(students)):
    bucket[students[i][0]][students[i][1]] += 1

한명씩 담아주면 된다.

 

이제 이들이 들어갈 방에 대해서 생각을 해봐야하는데,

1) 해당 성별&학년 학생이 없으면(인원수가 0이면) 방배정이 안된다.

2) 한 방의 최대수용인원보다 작으면, 자리가 남아도 방 하나를 배정해준다.

3) 한 방의 최대수용인원보다 크면 두가지경우로 나뉜다

4) 인원수가 최대수용인원의 k배이면, k개의 방을 배정한다.

5) 인원수가 k배 하고도 남는 인원이 있으면, 그 나머지 인원한테 +1 방을 배정해줘야 한다.

 

room_number = 0
for i in range(2):
    for j in range(7):
        if bucket[i][j] ==0:
            continue
        elif 0<bucket[i][j]<room_total:
            room_number +=1
        elif bucket[i][j]%room_total==0:
            room_number += bucket[i][j]/room_total
        elif bucket[i][j]%room_total!=0:
            room_number += (bucket[i][j]//room_total)+1

내가 말한 조건들을 모두 코드에 구현하면 이렇게 된다.

 

이제 print만 하면 된다.

근데 결과 반환이 float로 되는 경우가 있어서 이를 int로 다시 반환해준다.

print(int(room_number))

끝~

 

2차원 bucket만 생각했다면 soso 쉬운문제

 

 

전체 풀이)

student_total, room_total = map(int, input().split())
students = [list(map(int, input().split())) for _ in range(student_total)]
bucket = [[0]*7 for _ in range(2)]

for i in range(len(students)):
    bucket[students[i][0]][students[i][1]] += 1

room_number = 0
for i in range(2):
    for j in range(7):
        if bucket[i][j] ==0:
            continue
        elif 0<bucket[i][j]<room_total:
            room_number +=1
        elif bucket[i][j]%room_total==0:
            room_number += bucket[i][j]/room_total
        elif bucket[i][j]%room_total!=0:
            room_number += (bucket[i][j]//room_total)+1


print(int(room_number))