구현 문제였고 30분 정도 풀이를 시도해보았다. 처음에는 dates라는 list에 start_date, end_date의 tuple을 저장해두고 그 tuple을 순서대로 순회하면서 문제를 풀려고 했다. 그런데 그러려고 해 보니 일정이 계속 연속되는 경우, 모든 일정에 대한 start_date, end_date를 다 변수로 갖고 있어야 하는 문제점이 발생했다.
그리고 이 문제점을 마땅히 해결하지 못한 채 30분이 지나서 풀이를 보았다.
달력은 길이가 무한하거나 길지 않고 365일까지만 있으니 그냥 calendar list를 선언하고 그 안에 관련 정보를 저장해도 메모리 문제가 없다는 것을 미처 생각 못 했다.
풀이를 보고 이해한 다음, 풀이를 보지 않고 푼 코드는 다음과 같다.
N = int(input())
calendar = [0] * (365 + 1)
for _ in range(N):
S, E = map(int, input().split())
for i in range(S, E+1):
calendar[i] += 1
result = 0
row = 0 # 일정 테이프의 가로 값을 추적하는 변수
col = 0 # 일정 테이프의 세로 값을 추적하는 변수
for day in calendar:
if day != 0: # 일정이 있는 경우 -> 계속 합산
row += 1
col = max(day, col)
else: # 일정이 없는 경우 -> 결과 변수(result)에 값 더하고 기존 변수(row, col)는 초기화
result += row * col
row = 0
col = 0
# 마지막 일정의 넓이가 계산되지 않았으므로 한번 더 더해줌
result += row * col
print(result)
'알고리즘' 카테고리의 다른 글
[백준/파이썬] #16719 (0) | 2025.03.11 |
---|---|
[백준/파이썬] #16926 (0) | 2025.03.10 |
[프로그래머스] 게임 맵 최단거리(파이썬) (0) | 2024.01.17 |
[카카오 2024 인턴십 코테] 산 모양 타일링 (0) | 2024.01.17 |
[백준][Python 파이썬] 22945번 팀 빌딩 (0) | 2024.01.02 |