alpyrithm_알파이리즘

[알고리즘][Python] 백준(BOJ) 1946 신입 사원_파이썬 본문

Algorithm/백준 알고리즘_Python

[알고리즘][Python] 백준(BOJ) 1946 신입 사원_파이썬

알파이 2020. 8. 13. 00:38

 

1946 신입 사원    https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성��

www.acmicpc.net

 

 

 

 

 

문제 풀기 전 공부할 것 : python 입출력 방법(sys.stdin.readline)

 

 

 

 

 

 

 

 

풀이 1

<내용>

  • 서류 등수를 기준으로 먼저 정렬
  • 정렬된 지원자는 본인 앞에 위치한 지원자들을 interview 성적들 중 가장 좋은 성적이면(숫자가 가장 작으면) 선발된다.
  • 시간초과가 될 수 있으므로 import sys를 사용한다.

 

 

<코드>

import sys
input = sys.stdin.readline

t = int(input())
for _ in range(t):
    n = int(input())
    cv = [list(map(int, input().split())) for _ in range(n)]
    cv.sort(key = lambda x : x[0])
    interview = [cv[i][1] for i in range(n)]
    res = 1     # cv[0]이 서류 등수가 1등이므로 면접 등수는 관계없이 선발 가능하다.
    grade = interview[0]
    for i in range(1, n):
        grade = min(grade, interview[i])
        if grade == interview[i]:
            res += 1
    print(res)

 

+) interview라는 리스트를 굳이 만들지 않아도 됨

 

 

 

 

 

 

 

 

풀이 2

<내용>

  • interview라는 리스트를 따로 만들지 않고 cv에서 해결함
  • 방법은 풀이1과 동일

 

 

<코드>

import sys
input = sys.stdin.readline

t = int(input())
for _ in range(t):
    n = int(input())
    cv = [list(map(int, input().split())) for _ in range(n)]
    cv.sort(key = lambda x : x[0])
    res = 1
    grade = cv[0][1]
    for i in range(1, n):
        grade = min(grade, cv[i][1])
        if grade == cv[i][1]:
            res += 1
    print(res)

 

 

 

728x90
반응형
Comments