Algorithm/백준
[BAEKJOON] 13300번: 방 배정
NegotiationMan
2023. 9. 5. 14:40
문제
정보 초등학교에서는 단체로 2박 3일 수학여행을 가기로 했다. 여러 학년이 같은 장소로 수학여행을 가려고 하는데 1학년부터 6학년까지 학생들이 묵을 방을 배정해야 한다. 남학생은 남학생끼리, 여학생은 여학생끼리 방을 배정해야 한다. 또한 한 방에는 같은 학년의 학생들을 배정해야 한다. 물론 한 방에 한 명만 배정하는 것도 가능하다.
한 방에 배정할 수 있는 최대 인원 수 K가 주어졌을 때, 조건에 맞게 모든 학생을 배정하기 위해 필요한 방의 최소 개수를 구하는 프로그램을 작성하시오.
예를 들어, 수학여행을 가는 학생이 다음과 같고 K = 2일 때 12개의 방이 필요하다. 왜냐하면 3학년 남학생을 배정하기 위해 방 두 개가 필요하고 4학년 여학생에는 방을 배정하지 않아도 되기 때문이다.
코드
import math
n, k = map(int, input().split())
arr = [[0] * 2 for _ in range(6)] # 성별2개 6학년
cnt = 0
# 입력
for _ in range(n):
# st[학년][성별]
s, y = map(int, input().split())
arr[y - 1][s] += 1
for i in range(6):
for j in range(2):
if arr[i][j] == 0:
continue
elif arr[i][j] <= k:
cnt += 1
else:
# 이 부분을 math.ceil(arr[i][j]//k)로 해서 올림을 제대로 하지 못했음
cnt += math.ceil(arr[i][j] / k)
print(cnt)
나의 생각
문제를 풀 때 math.ceil(arr[i][j]//k)로 해서 계속 틀렸었다....
더욱더 쉽게 코드를 짤 수 있다.
for i in arr:
for j in i:
cnt += math.ceil(j/k)