728x90
1차 시도
2점
import sys
n, k = map(int, input().split())
data = [tuple(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n)]
idx = 0
data = sorted(data, key= lambda x:(x[0], x[1]))
for i in range(n):
if data[i][0] == 1:
idx = i #남학생 시작 idx
break
w_lst = data[:idx]
m_lst = data[idx:]
w_grade = []
m_grade = []
for i in w_lst:
w_grade.append(i[1])
for i in m_lst:
m_grade.append(i[1])
cnt = 0
for i in range(1,7):
cnt += w_grade.count(i)//k + w_grade.count(i)%k
for i in range(1,7):
cnt += m_grade.count(i)//k + m_grade.count(i)%k
print(cnt)
성별로 리스트를 따로 만들어서 학년이 각 리스트 별로 학년의 개수를 count
방 개수 = 성별별 학년 수 // 정해진 인원(k) + 성별별 학년 수 % 정해진 인원(k)
근데 지금 생각해보면 성별별 학년 수 % 정해진 인원(k)이 더해지면 안되고, 나머지가 있을 경우 "+1"만 했어야 했음. 한 방에 k인원이 들어갈 수 있는데 k만큼 나눈 후 나머지 인원은 한 방에 모두 들어갈 수 있으니까.... 2점 받은게 입력 예시로 주어진 입력만 존재해서 받을 수 있을 던것..
2차 시도
완전탐색으로 풀어도 시간복잡도는 O(N^2)나오는데 n이 최대 1000이여서 가능할듯
#한방에 같은 학년 같은 성별
#방의 최소 개수
import sys
n, k = map(int, input().split())
data = list(tuple(map(int, sys.stdin.readline().rstrip().split())) for _ in range(n))
data2 = data.copy()
data = set(data)
#성별로 나누고, 학년으로 나누고
#여학생이면서 1학년
#완전탐색 O(n^2) -> 100만
cnt = 0
room = 0
for i in data:
for j in data2:
if i[0] == j[0] and i[1] == j[1]: #성별과 학년 같은지 검사
cnt += 1
if cnt < k:
room += 1
else:
room += cnt // k
if cnt % k > 0:
room += 1
cnt=0
입력으로 받은 (성별, 학년)을 튜플로 묶어서 set으로 집합으로 변환. -> 어차피 성별과 학년이 같아야 같은 방에 배정 가능
집합으로 하나씩 대조해보면서 같은 게 나오면 cnt += 1 각 집합요소의 개수가 cnt로 나오면 k로 나누고 나머지가 있으면 room에 +1해줌.
근데 내가 작성한 첫번째 코드에서 "나머지가 있을 경우 "+1" 로 고쳤어도 100점이 나오긴 한다.
문제 꼼꼼히 읽고 예외 처리 잘하자...
다른 사람 풀이
https://velog.io/@jomg2007/%EB%B0%B1%EC%A4%80-13300%EB%B2%88
#학생 수: N, 최대 배정 인원 : k
N , k = map(int, input().split())
cnt = [[0,0,0,0,0,0],[0,0,0,0,0,0]]
result = 0
for i in range(N):
sex , grade = map(int, input().split())
cnt[sex][grade - 1] += 1
for i in cnt :
for j in i:
if j % k == 0:
result += j//k
else:
result += (j//k) + 1
print(result)
cnt로 학년, 성별이 같으면 cnt[sex][grade-1] 에 +1하는 방법
이렇게 간편하게 짤 수도 있는데... 더 공부해야겠다.
728x90
'알고리즘 > 백준' 카테고리의 다른 글
28014 자바 (0) | 2024.04.09 |
---|---|
11328 Strfry (0) | 2024.03.31 |
3273: 두 수의 합 (2) | 2024.03.23 |
1267 핸드폰 요금 (0) | 2024.03.12 |
2309 일곱 난쟁이 (0) | 2024.03.12 |