https://www.acmicpc.net/problem/1946
그리디 알고리즘을 활용 할 수 있는 문제 중 하나이다.
내 생각엔 이렇게 했다 :
- 전체 입력을 받고, 정렬을 좌측 점수에 대해 한 것, 우측 점수에 대해 한 것 두 가지로 나누어 둔다. 각 정렬은 오름차순이다.
- 그리고 각 정렬의 첫번째 아이템은 어쨌든 1등일 것이니, 그 값을 기반으로 갱신이 이루어지도록한다.
- 여기서부터 생각이 조금 복잡했는데, 자료구조 set을 쓰면 중복을 방지 할 수 있다고 한다. 혹시나 양쪽에서 빠질 수 있는 연산이 우려되어.. (양 쪽 분야에 대해 등수가 둘 다 꼴찌면 수가 두 번빠지는 상황 염려, 왜냐하면 조건에 안맞으면 하나씩 빼는 루틴을 생각해서) 이렇게 적어보니 괜찮은 아이디어라고 생각했다.
- 그렇게 해서 set에 모인 갯수 만큼 result에서 뺀게 답이다. 라고 생각했으나 틀렸습니다. 가 나타났다.
pivot 갱신이 가끔 일어나야한다는 점이 좀 걸렸다. 그리고 파일럿 코는 동시에 좌측 정렬을 끝낸 상태에 오른쪽 비교를 하길 권했다.
이게 첫 아이디어로 출발한 코드이다.
# 신입사원 기존 백업코드
import sys
input = sys.stdin.readline
testCaseCnt = int(input())
result = 0
for i in range(testCaseCnt):
applyCnt = int(input())
result = applyCnt
pairs = set()
originData = []
for j in range(applyCnt):
leftRank, rightRank = map(int, input().split())
originData.append([leftRank, rightRank])
sortedByL = sorted(originData, key=lambda x: x[0])
sortedByR = sorted(originData, key=lambda x: x[1])
LpivotL = sortedByL[0][0]
LpivotR = sortedByL[0][1]
RpivotL = sortedByR[0][0]
RpivotR = sortedByR[0][1]
for j in range(1, len(originData)):
if(LpivotL < sortedByL[j][0] and LpivotR < sortedByL[j][1]):
pairs.add((sortedByL[j][0], sortedByL[j][1]))
if(RpivotL < sortedByR[j][0] and RpivotR < sortedByR[j][1]):
pairs.add((sortedByR[j][0], sortedByR[j][1]))
result -= len(pairs)
print(result)
상당히 개선된 코드. 이건 꽤 재밌는 문제였다고 생각한다!!
import sys
input = sys.stdin.readline
testCaseCnt = int(input())
for i in range(testCaseCnt):
applyCnt = int(input())
result = 1
originData = []
for j in range(applyCnt):
leftRank, rightRank = map(int, input().split())
originData.append([leftRank, rightRank])
sortedByL = sorted(originData, key=lambda x: x[0])
LpivotR = sortedByL[0][1]
for j in range(1, len(originData)):
if(LpivotR > sortedByL[j][1]):
result += 1
LpivotR = sortedByL[j][1]
print(result)
'문제풀이' 카테고리의 다른 글
[PY] 1931 : 회의실 배정 (0) | 2025.04.10 |
---|---|
[PY] <!> 1700 : 멀티탭 스케줄링 (0) | 2025.04.10 |
[PY] 1541 : 잃어버린 괄호 (1) | 2025.04.09 |
[PY] <!> 11049 : 행렬 곱셈 순서 (0) | 2025.04.09 |
[PY] 12865 : 평범한 배낭 (0) | 2025.04.06 |