[백준1931번] 회의실배정

sohyun_·2022년 10월 24일
0

1931 회의실 배정
사용언어 : python
Greedy Alogorithm
난이도 : 골드 4

문제

💻 코드

💡초기 도전 알고리즘

#1개의 회의실이 존재
#이를 사용하고자하는 N개의 회의에 대해 회의실 사용표를 만들려고 한다.
#각 회의에 대해 시작시간과 끝나는 시간이 주어져 있음
#각 회의가 겹치지 않게하면서 회의실을 사용할 수 있는 회의의 최대갯수?

N=int(input())
#공백을 사이에 두고 회의시작 시간과 끝나는 시간이 주어진다

#알고리즘 예측
#일단 이차원 배열에 다 정리하고
t_list=[list(map(int,input().split())) for _ in range(N)]
t_list.sort()

sum=0
stack=[]


for i in range(len(t_list)-1):
    case=0
    if t_list[i][0] == t_list[i][1]:
        sum+=1
        continue
    #다음요소의 시작시간 > 현재 요소의 끝나는 시간
    #현재요소값은 무조건 사용가능한 경우
    if t_list[i+1][0] >= t_list[i][1]:
        sum+=1
        stack.append(i)
        case=1
    else:
        #다음요소의 끝시간 < 현재요소의 끝시간
        #현재요소는 제외 다음 요소만 사용
        if t_list[i+1][1] <= t_list[i][1]:
            case=1
        else:
            #현재 요소를 사용하고 다음요소를 사용하지 않는게 베스트
            t_list[i],t_list[i+1]=t_list[i+1],t_list[i]

    if i==len(t_list)-2:
            if case==1:
                sum+=1
        
        
        


print(sum)

#왜 항상 내알고리즘만 복잡하고 찾아보면 다들 간단하게 푸는건데..왜게에에ㅔ에에유ㅠㅠ
 

😱 최종 결과 : 좋지 않은 알고리즘
알고리즘이 너무 복잡해서 미처 생각지 못한 예외의 변수가 발생해 채점을 돌리면 도중 틀렸습니다가 된다..
너무 비효율적인 알고리즘이라고 생각해 버리고 새 알고리즘 탐색하기로 했다

코드 참고 했는데 다른 사람들은 어떻게 이런 생각을 하는걸까 왜 난 못하지하고 깊은 고민에 잠시 빠짐,,,,,,,,,,,,,,,,,,,,,,,,으ㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏㅏ

💡수정된 새 정답 알고리즘

N=int(input())
A=list(map(int, input().split()))
S=int(input())


for i in range(N):
    idx=A.index(max(A[i: min(N, i + S + 1)]))
    for j in range(idx,i,-1):
        A[j],A[j-1]=A[j-1],A[j] #교환하는 부분
    S -= (idx - i)
    if S <= 0: break
    
print(*A)    

!!!!!!알고리즘 떠올리기
음음
그 상황에서 최선의 선택하기
그게몽냐4

전체적으로 봤을 때
일단 단순하게 어떤 게 제일 좋을까?
당연히 일찍 끝나는게 제일 좋겠지
일찍 끝나는거 순서대로 정렬해
->
그 때 끝나는 시간이 같다면

후기
어렵따......그래도 이해해서 뿌듯

🔗참고
https://zidarn87.tistory.com/304
//몬말인지 잘이해가 안댐..곧 돌아오겟듭

profile
web backend developer

0개의 댓글