import sys
input = sys.stdin.readline
for _ in range(int(input())):
rank = []
n = int(input()) # 지원자 수
for _ in range(n):
rank.append(list(map(int, input().split()))) # 성적 순위 입력 받음
rank.sort(key=lambda x : x[0]) # 서류 심사 순위로 정렬
cnt = 1
_max = rank[0][1] # 면접 성적의 최고 랭크를 서류 성적 최고자로 설정
for i in range(1, n):
if rank[i][1] < _max : # 면접 성적이 앞의(서류 성적이 더 높은) 최고 등수 사람보다 높다면
cnt += 1 # 통과
_max = rank[i][1] # 최고 등수 변경
print(cnt) # 통과된 놈들 출력
문제풀이
핵심 개념과 풀이 흐름을 짧고 선명하게 정리했습니다.
import sys
input = sys.stdin.readline
# 3*3 영역의 행렬을 뒤집어 반환하는 함수
def reverseMat(i, j, mat):
for x in range(i, i + 3):
for y in range(j, j + 3):
mat[x][y] = 1 if mat[x][y] == 0 else 0
return mat
# n * m 행렬
n, m = map(int, input().split())
matA, matB = [], []
for mat in matA, matB: # 행렬 a, b 차례로 입력
for j in range(n):
mat.append(list(map(int, list(input().rstrip()))))
#print(matA)
#print(matB)
cnt = 0
for i in range(n-2):
for j in range(m-2):
if matA[i][j] != matB[i][j]: #두 행렬의 각 숫자 하나씩을 비교하면서 다른 경우 다음 아래의 3*3영역을 뒤집음
matA = reverseMat(i, j, matA)
cnt += 1 # 횟수 카운트
#print(matA)
#print(matB)
print(-1) if matA != matB else print(cnt) # 두 행렬이 다르면 -1 같으면 횟수 출력