알고리즘/백준

백준 1946: 신입 사원 (Python)

sssbin 2021. 9. 30. 16:26

https://www.acmicpc.net/problem/1946

 

1946번: 신입 사원

첫째 줄에는 테스트 케이스의 개수 T(1 ≤ T ≤ 20)가 주어진다. 각 테스트 케이스의 첫째 줄에 지원자의 숫자 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 각각의 지원자의 서류심사 성

www.acmicpc.net

 

처음 푼 코드 - 시간 초과

import sys
t = int(sys.stdin.readline())

for i in range(t):
    n = int(sys.stdin.readline())
    list1 = [0 for i in range(n)]
    list2 = [0 for i in range(n)]

    for j in range(n):
        r1, r2 = map(int, sys.stdin.readline().split())
        list1[r1 - 1] = j + 1
        list2[r2 - 1] = j + 1

    k = n
    cnt = 0

    for j in list1:
        if list2.index(j) < k:
            cnt += 1
            k = list2.index(j)

    print(cnt)

 

리스트 두개를 만들어서 비교하는게 비효율적이었던 것 같다

그래서 리스트 하나로 합쳐서 다시 풀었다

 

import sys
t = int(sys.stdin.readline())

for i in range(t):
    n = int(sys.stdin.readline())
    p = []

    for j in range(n):
        r1, r2 = map(int, sys.stdin.readline().split())
        p.append([r1, r2])

    p.sort()
    k = n + 1
    cnt = 0

    for j in range(n):
        if p[j][1] < k:
            cnt += 1
            k = p[j][1]

    print(cnt)

 

푼 방식은 똑같음

 

 

생각보다 시간이 좀 걸린 문제였다

 

슬퍼요💧

 

멍청하게 중간에 print로 확인 코드 넣었다가 안 지우고 그냥 제출해서 틀림~

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 13305: 주유소 (Python)  (0) 2022.01.21
백준 1789: 수들의 합 (Python)  (0) 2021.10.02
백준 10162: 전자레인지 (Python)  (0) 2021.09.30
백준 2217: 로프 (Python)  (2) 2021.09.29
백준 5585: 거스름돈 (Python)  (0) 2021.09.29