데이터사이언스 기록기📚

[백준/Python] 1931번(그리디, 정렬)_회의실 배정 본문

Coding Test/백준(Python)

[백준/Python] 1931번(그리디, 정렬)_회의실 배정

syunze 2023. 5. 11. 00:23

📌문제 유형

그리디, 정렬 (실버1)

 

📌문제

 

1931번: 회의실 배정

(1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

www.acmicpc.net

 

📌나의 문제풀이

- 끝나는 시간의 min값보다 시작 시간이 크면 idx에 저장
- 이후, cnt +=1 하고 idx부터 다시 탐색

n = int(input())
meetings = []

for _ in range(n):
    meetings.append(list(map(int,input().split())))

meetings.sort()


idx, cnt = 0, 0
while idx < n:
    if idx == n-1:
        cnt += 1
        break

    end = meetings[idx][1]
    before_idx = idx
    for i in range(idx + 1,len(meetings)):
        if meetings[i][0] >= end:
            idx = i
            break
        if end > meetings[i][1]:
            end = meetings[i][1]
    cnt += 1
    if before_idx == idx:
        break
    

print(cnt)

 

📌 다른사람의 문제풀이

 

[백준알고리즘] 1931번: 회의실배정 -Python

[백준알고리즘] 1931번: 회의실배정 -Python https://www.acmicpc.net/problem/1931 1931번: 회의실배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net 아랫부분에 새로 푼 방식의 풀이도 추가했다. 이번

suri78.tistory.com

n = int(input())
time = sorted([tuple(map(int, input().split())) for _ in range(n)], key=lambda x:(x[1], x[0]))
ans = end = 0
for s, e in time:
    if s >= end:
        ans += 1
        end = e
print(ans)

 

📌 리뷰 

-끝나는 시간을 먼저 정렬하고, 실행횟수를 줄일 수 있는 방법도 생각해보기

728x90
Comments