ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] BOJ 13300 : 방배정
    코딩테스트/백준 2024. 10. 11. 08:22

    요구사항

    • 시간 제한 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)

    '코딩테스트 > 백준' 카테고리의 다른 글

    [Python] BOJ 1406 : 에디터  (0) 2024.10.14
    [Python] BOJ 11328 : Strfry  (0) 2024.10.11
    [ Python] BOJ 3273 : 두 수의 합  (0) 2024.10.10
    [Python] BOJ 10808 : 알파벳 개수  (4) 2024.10.09
    [Python] BOJ 14888 : 연산자 끼워넣기  (1) 2024.10.07
Designed by Tistory.