[99클럽 5기] 코딩테스트 스터디 19일차 TIL - 그리디 알고리즘

2025. 2. 13. 14:01·Coding-Test/항해99
728x90
반응형

[Silver I] 신입 사원 - 1946 

[문제 링크](https://www.acmicpc.net/problem/1946)

🗝️오늘의 학습 키워드 (Keyword)

  • 그리디 알고리즘
  • 정렬

💻본인의 언어로 내용 정리 (Today I Learned)

신입 지원자들의 서류 심사 성적과 면접 결과 등수가 주어진다. 한 지원자에 대해 다른 지원자보다 두 개의 성적 중 하나라도 높으면 신입 사원으로 선발이 된다.

 

즉 두 개의 성적 모두가 어느 다른 한명의 지원자보다 낮을 경우, 결코 선발이 되지 않는다고 한다.

 

문제를 일부러 꼬아 낸 건지는 모르겠지만, 약간에 함정이 있다.

지원자들의 성적은 다음과 같이 주어진다.

[서류 심사 성적, 면접 결과 등수]

서류 심사 성적은 높은 것이 좋고, 면접 결과 등수는 (숫자가) 낮은 것이 좋은 것이다.

 

따라서 이 문제는 두 개의 성적 중 어느것을 기준으로 문제를 해결해 나갈지를 먼저 선정하는 것이 핵심이다.

 

두 개의 성적 중 하나를 기준으로 정렬을 진행하여 다른 하나의 성적을 비교하는 방식으로 접근해보았다.

 

💡알고리즘 풀이

N = int(input())

people = []
for _ in range(N):
    a, b = map(int, input().split())
    people.append((a, b))
    
people.sort(key = lambda x : x[0]) # 서류 성적이 낮은 순 정렬

지원자 수를 입력 받고, 지원자들의 성적들을 입력 받아 리스트에 저장한다.

이를 key = lambda를 이용하여 서류 심사 성적이 낮은 순으로 정렬한다.

 

pass_num = 1 # 통과한 사람 수
target = people[0][1] # 서류 성적이 젤 낮은 사람의 면접 등수
    
# 등수 비교
for i in range(1, len(people)):
    if (target > people[i][1]): # 등수가 더 크다 -> 순위가 낮다 -> 서류 성적도 낮고 면접 순위도 낮다
        pass_num += 1 # 합격자 한명 추가
        target = people[i][1] # 타겟 변경

print(pass_num)
pass_num : target을 기준으로, target보다 등수가 높은 사람이 있으면 1씩 증가, 등수가 높은 사람이 없을 경우 target이 합격하기에 기본값 1
target : 정렬 후를 기준으로, 성적이 가장 낮은 사람의 등수.

 

서류 심사 성적이 가장 낮은 사람을 target으로 선정, 바로 다음 사람과 등수를 비교하며 합격자를 가린다. 등수(숫자)가 낮다는 것은 더 높은 등수라는 뜻.

 

target을 바꿔 추가 탐색을 진행한다.

 

🗒️제출 코드

# 1946 신입 사원

import sys
input = sys.stdin.readline

T = int(input())

for _ in range(T):
    N = int(input())

    people = []
    for _ in range(N):
        a, b = map(int, input().split())
        people.append((a, b))
    
    people.sort(key = lambda x : x[0]) # 서류 성적이 낮은 순 정렬

    pass_num = 1 # 통과한 사람 수
    target = people[0][1] # 서류 성적이 젤 낮은 사람의 면접 등수
    
    # 등수 비교
    for i in range(1, len(people)):
        if (target > people[i][1]): # 등수가 더 크다 -> 순위가 낮다 -> 서류 성적도 낮고 면접 순위도 낮다
            pass_num += 1 # 합격자 한명 추가
            target = people[i][1] # 타겟 변경

    print(pass_num)

💭오늘의 회고

문제가 참 까다로웠다. 말 장난 치는건가 싶었다..

 

문제를 대충 읽고 문제를 접근하였다면 아마 수많은 실패가 나왔을 것이다.

테스트 케이스도 이해가 안되어 몇 번이고 검증하였던 문제였다.

 

문제 자체는 크게 어려울 것 없었으나, 역시 등수를 판별하는 과정에서 약간의 혼돈이 생겼다. (숫자가 작아야 더 큰거라니..)


⬇️전체 소스코드⬇️

 

hanghae99/python_middler/19일차 신입 사원/신입 사원.py at main · Do-heewan/hanghae99

개발자 커리어 개척 캠프 항해99 / 파이썬 미들러 노희완. Contribute to Do-heewan/hanghae99 development by creating an account on GitHub.

github.com

 

728x90
반응형
저작자표시 (새창열림)

'Coding-Test > 항해99' 카테고리의 다른 글

[99클럽 5기] 코딩테스트 스터디 21일차 TIL - 동적 계획법  (1) 2025.02.17
[99클럽 5기] 코딩테스트 스터디 20일차 TIL - 우선순위 큐  (2) 2025.02.14
[99클럽 5기] 코딩테스트 스터디 18일차 TIL - 우선순위 큐  (0) 2025.02.12
[99클럽 5기] 코딩테스트 스터디 17일차 TIL - 그리디 알고리즘  (2) 2025.02.11
[99클럽 5기] 코딩테스트 스터디 16일차 TIL - 그리디 알고리즘  (1) 2025.02.10
'Coding-Test/항해99' 카테고리의 다른 글
  • [99클럽 5기] 코딩테스트 스터디 21일차 TIL - 동적 계획법
  • [99클럽 5기] 코딩테스트 스터디 20일차 TIL - 우선순위 큐
  • [99클럽 5기] 코딩테스트 스터디 18일차 TIL - 우선순위 큐
  • [99클럽 5기] 코딩테스트 스터디 17일차 TIL - 그리디 알고리즘
희완
희완
희완한 코딩일상
    반응형
  • 희완
    Code-Heewan
    희완
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Python
        • 가상환경
      • Algorithm
      • Coding-Test
        • 백준
        • 프로그래머스
        • 항해99
      • Data-Analysis
      • 웹 개발
        • django
      • AWS
      • 공모전
      • Mobile
  • 링크

    • Github
  • 300x250
  • hELLO· Designed By정상우.v4.10.3
희완
[99클럽 5기] 코딩테스트 스터디 19일차 TIL - 그리디 알고리즘
상단으로

티스토리툴바