본문 바로가기
  • 살짝 구운 김 유나
Algorithm

월말평가 코드 (pass)

by yunae 2022. 8. 30.

코드

'''
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호관 가는길. 싸피 면스 하러 학교갔을 때가 엊그제 같은디.
벌써 두번째 월말평가 끝! 앞으로 수업 쫌만 더 열심히 집중해서 듣자 유나,,,ㅎ
아자아자 홧팅이닷

'Algorithm' 카테고리의 다른 글

순열과 부분집합  (0) 2022.09.21
Heap  (0) 2022.09.13
Tree  (0) 2022.08.26
DFS , BFS  (0) 2022.08.25
Queue  (0) 2022.08.24

댓글