코드
'''
2
5 1 4
3 5 5 4 5
2 1 6
1 3 2 2 3 5
'''
T = int(input())
for test_case in range(1, T+1):
# 학생수, 그룹의 최소 인원과 최다 인원 기준
# 5 1 4
N, kMin, kMax = map(int, input().split())
# 학생들의 점수 리스트 [1 2 2 3 3 5 5]
S = list(map(int, input().split()))
S_set = list(set(S)) # [1 2 3 5]
S_set.sort() # 셋을 정렬해주기
minV = 9999999
# t1, t2 조합을 만들어 내는 이중포문
for t1 in range(len(S_set) - 1):
for t2 in range(t1 + 1, len(S_set)):
# print(f't1 = {t1}, t2 = {t2}')
# print(f'S_set[t1] = {S_set[t1]} S_set[t2] = {S_set[t2]}')
# 각 반 리스트 생성
A = []
B = []
C = []
# [1 2 2 3 3 5 5]
# A >= t2, t1 <= B < t2, C < t1
for score in S:
if score >= S_set[t2]:
A.append(score)
elif score >= S_set[t1]:
B.append(score)
else:
C.append(score)
# 각 반 학생 수
len_lst = [len(A), len(B), len(C)]
# 최소, 최다 인원 기준을 만족하는 케이스 중에서
if kMin <= len(A) <= kMax and kMin <= len(B) <= kMax and kMin <= len(C) <= kMax:
# 가장 다수의 인원 - 적은 수의 인원 의 값이 현재 minV보다 작으면 갱신
if max(len_lst) - min(len_lst) < minV:
minV = max(len_lst) - min(len_lst)
# minV 가 초기값 그대로인 경우(어떠한 반편성도 기준을 만족하지 못했을때) -1 출력
if minV == 9999999:
print(f'#{test_case} -1')
else:
print(f'#{test_case} {minV}')
어렵게 생각하다가 한시간 보내버리고 포기하는 심정으로 문제를 읽었더니 해결되었다.
누가 이차원 배열 나온다고함..? 시험 직전에 문제풀이 한 것들은 훼잌크였다...ㅎ
공대 7호관 가는길. 싸피 면스 하러 학교갔을 때가 엊그제 같은디.
벌써 두번째 월말평가 끝! 앞으로 수업 쫌만 더 열심히 집중해서 듣자 유나,,,ㅎ
아자아자 홧팅이닷
댓글