
❓ 문제
백준 브론즈2 문제 > 방 배정
❗ 해결
범위에 제한이 있다. 남/여 1학년~6학년 까지이므로 한정된 크기의 리스트를 사용해서 학생들의 방을 배정했다.

이렇게 성별/학년을 가르키는 2행 6열짜리 배열을 선언한 후, 입력이 들어올 때 마다 방 안에 넣어버리면 된다.
n, limit = map(int, input().split())
rooms = [[0] * 7 for _ in range(2)]
for _ in range(n):
gender, grade = map(int,input().split())
rooms[gender][grade] += 1
이렇게 되면 예제 입력 1을 넣게 되면 테이블이 이렇게 찬다.

그대로 방의 개수(값이 0이 아닌것을 카운트)를 세어주면 되는데 여기서 주의할 점은 문제에서 방의 정원이 n명인데, 방 안에 n+1명이 들어가면 새로운 방이 필요하다고 했다.

즉 빨간색 네모 부분에 3학년 남학생이 세명이나 있어 새로운 방이 필요할 것이다.
처음에는 단순히 정원을 초과했을 경우에
방 개수 += (해당 방에 있는 총 인원 // 정원) + 1
이렇게 코드를 작성했는데, 이렇게 되면
방에 4명이 있고 정원이 2명이면 (4 // 2) + 1 이 되어서 실제로는 방이 두개만 있으면 되는데 세개로 늘어나버려
자꾸 실패하는 실수를 했다.
그래서 방에 있는 사람과 방의 정원을 나눴을 때 나누어 떨어지면 그냥 몫만 구해서 방 개수에 누적해주고
나누어 떨어지지 않으면 +1 해주는 로직을 짰다.
for i in range(len(rooms)):
for j in range(len(rooms[0])):
# 위의 테이블을 돌면서
# 방에 적어도 한명이상 존재하는 값만 카운트 한다.
if rooms[i][j] != 0:
# 근데 방 정원보다 많은 방의 경우
if rooms[i][j] > limit:
# 나누어 떨어지면
if rooms[i][j] % limit == 0:
count += rooms[i][j] // limit
# 나누어 떨어지지 않으면
else:
count += (rooms[i][j] // limit) + 1
else:
count += 1
print(count)
전체코드
n, limit = map(int, input().split())
rooms = [[0] * 7 for _ in range(2)]
count = 0
for _ in range(n):
gender, grade = map(int,input().split())
rooms[gender][grade] += 1
for i in range(len(rooms)):
for j in range(len(rooms[0])):
if rooms[i][j] != 0:
if rooms[i][j] > limit:
if rooms[i][j] % limit == 0:
count += rooms[i][j] // limit
else:
count += (rooms[i][j] // limit) + 1
else:
count += 1
print(count)

한참 헤맬 때 눈물겨운 2점 기록들 .........
P.S
4 2
1 1
1 1
1 1
1 1
정답 : 2
내 출력 : 3
이 반례가 로직 수정에 도움이 제일 많이 되었다.