요구사항
- 시간 제한 2초 N과 K가 각각 1000
- 메모리 제한 512MB
- 조건에 맞게 모든 학생을 배정하기 위해 필요한 방의 최소 개수
설계 1
- 파이썬에서 제공하는 모듈을 불러와서 사용해야겠다.
- combination 으로 시작.
- 조합 중 같다면 count
구현 1
from itertools import combinations
N, K = map(int, input().split())
student_list = [tuple(map(int, input().split())) for _ in range(N)]
combi_student_list = list(combinations(student_list, K))
count = 0
for combi in combi_student_list:
if combi[0] == combi[1]:
print(combi[0], combi[1])
count += 1
print(count)
- 만약 같지 않을 때 예외처리가 없다.
- 예외처리를 해보려 시도해 보았지만, 도저히 구현이 안되었다.
- 물론 아래 나올 방법이 복잡도 측면에서 더 좋겠지만, 해보고 싶었다.
설계 2
- 이중 리스트를 사용해 성별, 학년이 총 몇명 있는 지 카운트 한다.
- 이중 for문을 돌면서 필요한 rooms의 개수를 합한다.
구현 2
N, K = map(int, input().split())
students = [[0]* 6 for _ in range(2)] # 2 x 6 배열, [성별][학년]
for i in range(N):
gender, grade = map(int, input().split())
students[gender][grade-1] += 1 # 성별과 학년별 학생 수 카운트
rooms = 0
for gender in range(2):
for grade in range(6):
if students[gender][grade] > 0:
# 방의 수 계산, 올림 처리로 (학생 수 + K - 1) // K 사용
rooms += (students[gender][grade] + K - 1) // K
print(rooms)