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)