백준 3020번 개똥벌레

청천·2022년 8월 16일
0

백준

목록 보기
8/41

imos를 사용 하여 풀었다. 메모리 부분은 딕셔너리로 해결 하였다.
1차원 배열에서 imos는 입장 때 +1 퇴장 때 -1을 기록한다.
imos 처음 다루어 봤는 데 많이 재밌었다.

문제 링크
https://www.acmicpc.net/problem/3020

N, H = map(int,input().split()) # N은 짝수 2<=N<=200000, 2<=H<=500000
suksoon = [0 for _ in range(H+1)]
jongyousuck = [0 for _ in range(H+1)]

#해당 높이에 걸리는 것들 누적합

giulin_H = [0 for _ in range(H+1)]
for i in range(1, N+1):
    suk = int(input())
    if i % 2 == 1: # 석순
        giulin_H[0] += 1
        giulin_H[suk] -= 1
    else: # 종유석
        giulin_H[H] -= 1
        giulin_H[H-suk] += 1
print(giulin_H)
prefix = [giulin_H[0]] + [0 for _ in range(H)] # 패딩 포함

for i in range(1, H+1):
    prefix[i] = prefix[i-1] + giulin_H[i]
print(prefix)
prefix_dic = {}
for i in range(1, len(prefix)):
    prefix_dic[prefix[i]] = prefix_dic.get(prefix[i], 0) + 1
print(prefix_dic)

print(min(prefix_dic), prefix_dic[min(prefix_dic)])

0개의 댓글