정렬
페이지
미리보기
정렬그리디 알고리즘
자세히 보기
백준 1946번
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)                    # 통과된 놈들 출력
그리디 알고리즘
자세히 보기
백준 1080번
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 같으면 횟수 출력