백준 :: 신입 사원 <1946번>

혜 콩·2022년 5월 26일
0

알고리즘

목록 보기
18/61

> 문제 <

https://www.acmicpc.net/problem/1946

> 아이디어 <

탈락 기준: 비교 대상자(B)의 서류 s, 면접 m이 둘 다 A보다 등수가 낮다면, A는 탈락
나머지는 선발 ---> 최대 인원수 구하기

  • (wrong) 대체 왜 틀린건데...? my idea -> 출력 잘 나오는데 백준에서는 오답
  1. 서류순위 기준으로 sort
  2. 다음 사람(서류 1등, 2등, 3등...)의 면접 순위와 비교 (ex. 서류 1등과 2등의 면접 순위 비교)
  3. 2등의 면접 순위가 1등보다 낮으면? - 탈락
  4. 탈락이면, N - 1 (통과인원을 전체로 초기 설정해두어서 탈락인원 빼주기)
  • (success)
  1. 서류순위 기준으로 sort
  2. 서류 1등은 이미 채용(pass=1)이므로 면접 순위만 비교!
  3. 서류 1등의 면접 순위를 초기값으로 설정 (m)
  4. 서류 2등의 면접 순위와 m를 비교, 2등의 면접 순위가 더 높다면 m 재설정 + 선발 인원 (pass) +1
  5. for문을 통해 반복

> 코드 <

# success

import sys

T = int(sys.stdin.readline())        # 테스트 케이스 = 출력 갯수

for i in range(T):
    TL = []
    N = int(sys.stdin.readline())
    for _ in range(N):
        TL.append(list(map(int, sys.stdin.readline().split())))           # 3 2 삽입

    TL.sort()
    passed = 1      # 서류심사 1등은 이미 채용, 면접 순위만 비교하면 됨
    m = TL[0][1]

    for j in range(1, N):
            if TL[j][1] < m:               # 서류 1등보다 면접 순위가 높다면
                m = TL[j][1]
                passed += 1
    print(passed)
# wrong

import sys
T = int(sys.stdin.readline())        # 테스트 케이스 = 출력 갯수

for i in range(T):
    TL = []
    N = int(sys.stdin.readline())
    for _ in range(N):
        TL.append(list(map(int, sys.stdin.readline().split())))           # 3 2 삽입

    TL.sort()
    passed = N      

    for j in range(1, N):
            if TL[j][1] > TL[j-1][1]:               # 서류 1등보다 면접 순위가 낮다면 (서류순위도 낮고 면접도 낮고)
                passed -= 1                         # 탈락인 사람 제외
    print(passed)

profile
배우고 싶은게 많은 개발자📚

0개의 댓글