ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 1946. [Python]신입 사원
    Python_알고리즘/Silver I 2023. 12. 19. 21:43

    1. 문제

     

     

    2. 접근 방법

     

    • 시간 제한: 2초
    • 메모리 제한: 256MB
    • 정렬

     

    3. 파이썬 코드

     

    import sys
    
    input = sys.stdin.readline
    # 테스트 케이스
    T = int(input())
    for _ in range(T):
        # 들어오는 인원 수
        N = int(input())
        # 총 등수를 카운팅할 리스트
        total_list = []
        # 사람들 등수 추가
        for __ in range(N):
            person_list = list(map(int, input().split()))
            total_list.append(person_list)
        # 서류심사 성적 순위로 정렬
        total_list.sort(key=lambda x: x[0])
        answer_list = []
        # 면접 순위를 정답 리스트에 저장
        answer_list.append(total_list[0][1])
        # 초기 최대값과 최소값 선언
        max_value = answer_list[-1]
        min_value = answer_list[-1]
        # 사람들 성적을 반복문을 순회하며 조건 비교
        for i in total_list[1:]:
            # 앞선 사람의 서류 성적은 높기때문에 면접 순위만 비교
            if i[1] < max_value:
                # 이미 최저로 등록된 점수보다 높아야 하기 때문에 비교 후 높을 경우 순위 갱신
                if i[1] < min_value:
                    min_value = i[1]
                    answer_list.append(i[1])
        print(len(answer_list))

     

    4. 문제를 풀고난 후 생각

     

    • 서류 심사 순위순으로 정렬을 진행해주면  1 ~ N 명까지 정렬이 된다.
    • 이렇게 정렬을 진행한 후 면접 심사 순위를 비교해가며 초기 설정된 min_value 보다 작고 max_value 보다 작은 경우를 찾아서 min_value 값을 갱신해주며 정답 리스트에 저장해주면 된다.
    • 문제에서 최소 하나의 성적이라도 다른 사람보다 높아야 하기 때문에 서류 순서로 정렬을 진행했기 때문에 면접 순위만 비교해주면 간단하게 해결된다.

    처음에 접근하는 방식을 for문 2개를 사용하여 비교하였고 시간초과가 발생했고 고민 후 한번 점수리스트를 돌릴때 최고값과 최소값을 알고있는 경우 쉽게 해결할 수 있을것 같다는 생각이 들어서 코드를 작성함.

     

    5. 문제를 푸는데 도움이 되는 지식

     

    • 정렬

    'Python_알고리즘 > Silver I' 카테고리의 다른 글

    1141. [Python] 접두사  (0) 2024.04.09
    11279. [Python]최대 힙  (0) 2024.01.09
    1926. [Python]그림  (0) 2023.12.09
    1342. [Python]행운의 문자열  (1) 2023.12.08
    1421. [Python]나무꾼 이다솜  (2) 2023.12.07

    댓글

Designed by Tistory.