[백준-1946] 신입 사원

이말감·2022년 3월 22일
0

백준

목록 보기
16/49

문제

링크

코드

  • 틀린 풀이
import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t) :
    n = int(input())
    person = []
    for _ in range(n) :
        person.append(list(map(int, input().split())))
    score = [0] * n
    count = 0
    for i in range(n) :
        a, b = person[i][0], person[i][1]
        for j in range(n) :
            if i == j :
                continue
            if a > person[j][0] and b > person[j][1] :
                score[i] += 1
        if score[i] == 0 :
            count += 1
    print(count)
  • 맞는 풀이
import sys
input = sys.stdin.readline

t = int(input())

for _ in range(t) :
    n = int(input())
    person = []
    for _ in range(n) :
        person.append(list(map(int, input().split())))
    person.sort()
    
    rank = person[0][1]
    count = 1
    for i in range(1, len(person)) :
        if person[i][1] < rank :
            count += 1
            rank = person[i][1]
    print(count)

풀이

틀린 풀이를 실행했을 때 계속 시간 초과가 발생했다. 아마 2중 for문을 돌려서 시간이 오래 걸리는 것 같다.
그래서 다른 사람들의 코드를 살펴보고 해결의 실마리를 얻었다 !!!!!!!!!!!!!!!!!!!!!!

처음에는 그냥 모든 사람들의 서류, 면접 등수를 함께 비교했는데,
맞는 풀이는 다음과 같다.

  1. 1차 서류시험에서 1등인 사람은 무조건 합격이므로 서류 등수를 기준으로 정렬한다.
  2. 서류 1등의 면접 시험을 기준으로 모든 사람의 등수를 하나씩 비교하면서 센다.
    2-1. 지원자의 면접 시험 등수가 서류 1등의 면접 시험 등수보다 높으면 대체하고 count+1
    2-2. 지원자의 면접 시험 등수가 서류 1등의 면접 시험 등수보다 낮으면 pass
  3. 반복문이 끝나고 count를 출력한다.

참고

profile
전 척척학사지만 말하는 감자에요

0개의 댓글