티스토리 뷰

728x90
반응형

백준 1946번 신입 사원

백준 1946번 신입 사원

  1. 문제를 잘 읽어야한다. 성적의 순위를 입력 받으니깐 더 작은 값일수록 성적이 좋음.
  2. 서류랑 면접중 적어도 한개만 다른 지원자들보다 떨어지지 않으면 입사가능.
  3. 서류 성적 순위를 오름차순으로 정렬해서 서류성적이 가장 좋은 리스트의 첫번째 부분은 적어도 서류성적은 무조건 다른 지원자보다 좋으므로 답으로 가능.
  4. 그 뒤에 애들은 서류 성적이 전애들보다 무조건 안좋음. 그래서 면접 성적이 더 좋아야 입사 가능. 첫 친구의 면접 성적을 저장해두고 비교해가면서 만약 면접 성적이 더 좋으면(순위가 더 작으면) 서류 성적은 안좋지만 면접 성적은 좋으므로 답 가능임. 그 다음 면접 성적 비교 변수도 계속 지금까지의 가장 좋은 면접 성적 순위로 업데이트 해줘야함.

코드

import sys
input = sys.stdin.readline

for _ in range(int(input())):
    n = int(input())

    """
    서류 성적 순위순으로 오름차순 정렬을 하면
    배열 첫번째의 서류 성적이 가장 좋으니깐 
    서류, 면접중 서류는 무조건 성적이 더 좋으므로
    한개만 좋으면 입사할 수 있으므로 픽하고
    두번째부터 뒤쪽 끝까지는 서류는 무조건 성적이 안좋으니깐
    {면접 성적 순위를 비교}(이건 밑에 있음)하면서 답을 체크하면된다.
    """
    scores = sorted([list(map(int, input().strip().split()))  \
        for x in range(n)], key = lambda x : x[0])

    """
    서류 성적 가장 좋은 리스트의 첫번째는 무조건 입사 가능하므로
    answer 1부터 시작해줌. 
    문제에서 둘중에 서류심사 성적과 면접시험 성적 중 
    적어도 하나가 다른 지원자보다 떨어지지 않는 자만 선발하는데
    서류성적이 가장 좋으니깐 무조건 가능
    """
    answer = 1

    """
    m(min)에 우선 첫번째 면접 순위를 넣어주고,
    뒤에 for문에서 인덱스 1부터 끝까지 비교한다. 
    """
    m = scores[0][1]

    """
    면접 성적 순위가 m보다 더 작으면 즉, 순위가 더 작으니깐 성적이 더 좋음
    지금 서류 성적 순위를 오름차순 정렬 했으니깐 서류 성적이 안좋은 순으로 되있어서 
    면접순위가 성적이 더 좋다면 적어도 한개(면접) 성적이 더 좋으니깐 답이 가능함
    그리고 m도 면접 성적의 순위가 작은 즉, 면접 성적 점수가 더 높은걸로 업데이트하고 
    계속 그 m으로 비교하면 면접 순위가 가장 낮은걸로 비교해서 완벽함
    """
    for i in range(1, n):
        if scores[i][1] < m:
            m = scores[i][1]
            answer += 1
    print(answer)
728x90
반응형
댓글
반응형
250x250
글 보관함
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
링크