코딩테스트/BOJ

[백준][BFS] 20207. 달력

박소민 2023. 3. 14. 23:59
20207. 달력

 

  • 내 풀이
    • 떨어진 날들은 따로 계산해야하므로 연속된날의 시작점을 찾아서 start에 저장
    • -> start에서 하나씩 뽑아서 각각 bfs 돌리면서 계산
  • 처음) 런타임 에러 오류 -indexError
    •  q+1 파악할때 q+1이 365를 넘어가는지 확인해줘야함
#가장 많이 겹치는 날: 행
#일정이 떨어지지 않으면 열은 길어짐
from collections import deque

#일정 개수
n=int(input())
lst=[0 for _ in range(366)] #0~365 

#겹치는 날은 값이 증가하도록
for i in range(n):
    s, e=map(int,input().split())
    for j in range(s,e+1):
        lst[j]+=1

flag=0
start=[]
#연속된 날 파악
for i in range(366):
    if lst[i]==0:
        flag=0
        continue

    if flag==0 and lst[i]!=0:
        flag=1
        start.append(i)

queue=deque()
def bfs(v):
    global r,c
  
    queue.append(v)
    c+=1
    
    while queue:
        q=queue.popleft()
        r=max(r, lst[q])

        if q+1<=365: #이거 체크안하면 indexError
            if lst[q+1]!=0:
                c+=1
                queue.append(q+1)
                r=max(r, lst[q+1])
    
answer=0
r,c=0,0
for st in start:
    #초기화
    r=0
    c=0
    bfs(st)
  
    answer+= (r*c)

print(answer)