문제
https://www.acmicpc.net/problem/1946
코드
import sys
T = int(input())
for _ in range(T):
N = int(input())
cnt = 1
lst = []
for _ in range(N):
x = list(map(int, sys.stdin.readline().rstrip().split()))
lst.append(x)
lst.sort()
min = lst[0][1]
for i in range(1, N):
if min > lst[i][1]:
min = lst[i][1]
cnt += 1
print(cnt)
이번 문제는 2가지 버전의 코드가 있습니다.
위 코드는 값을 입력받고 서류 심사 성적을 기준으로 오름차순 정렬을 해줬습니다.
그 후 최솟값을 정해주고 현재 최솟값 보다 작은 수가 나오면 순위 높은 것이기 때문에
최솟값을 바꿔주고 cnt에 +1을 했습니다.
cnt가 1로 시작하는 이유는 첫 번째 원소는 서류 성적이 1등이기 때문입니다.
그래서 for문의 인덱스도 1부터 시작하는 것입니다.
import sys
T = int(input())
for _ in range(T):
N = int(input())
cnt = 1
lst = [0] * (N+1)
for _ in range(N):
a, b = map(int, sys.stdin.readline().rstrip().split())
lst[a] = b
min = lst[1]
for i in range(2, N+1):
if min > lst[i]:
min = lst[i]
cnt += 1
print(cnt)
위 코드가 첫 번째 코드보다 좀 더 효율적입니다.
일단 a,b 값을 각각 인덱스(서류심사 순위)와 값에 넣었기 때문에
따로 오름차순 정렬을 해줄 필요가 없습니다.
min이 인덱스1부터 시작하는데, 그 이유는 0순위는 없기 때문에 lst[0] = [0]이라
제대로 비교가 되지 않습니다.
for문의 범위도 같은 이유에서 2부터 시작합니다.
첫 번째 결과가 마지막에 작성한 코드이고, 두 번째 결과가 처음 작성한 코드입니다.
그리고 sys를 이용해 받을 경우 str형이기 때문에 int형으로 변환시켜주어야 합니다.
저는 생각도 못하고 있다가 틀렸어서 혹시 몰라서 남깁니다.
'IT > 알고리즘' 카테고리의 다른 글
알고리즘 - 퀵 정렬(2) (0) | 2020.12.04 |
---|---|
알고리즘 - 퀵 정렬(1) (0) | 2020.12.01 |
백준 - 1764번 (0) | 2020.11.25 |
백준 - 10610번 (0) | 2020.11.25 |
백준 - 10815번 (0) | 2020.11.24 |
댓글