-
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