[Baekjoon] 2003. 数の和2[S 3]
3910 ワード
📚 質問する
https://www.acmicpc.net/problem/2003
これは二重ポインタの問題です.ダブルポインタs,eが一緒に出発する問題を解いた.
sとeのゼロインデックスからsからeへの数列の和を比較し、eが配列を超えた場合、重複文を終了します。 和がMに等しい場合の数は,cntが1増加し,eが1格子移動することに等しい.(s,eのいずれかは移動可能で、両方とも移動可能!) 和がMより小さい場合、eグリッドを移動して和を増加させ、Mより大きい場合、sを移動して和を減少させる。 sがeを超える瞬間は0,eが正常動作を上回る.そのため、例外処理をしなくても大丈夫です。
上記のコードを実装すると、eグリッドを移動して合計すると、先頭インデックスにインデックスエラーが発生します.
したがって、[0]を横に含むパディングを使用して、所与の配列を解決する.
📒 コード#コード#
N, M = map(int, input().split())
# e가 1 더해지고 호출하니 배열을 넘칠 수 있다. 그래서 padding을 활용한다.
arr = list(map(int, input().split())) + [0]
s = e = cnt = 0
sum = arr[0]
while e < N: # e가 넘치면 종료
if sum <= M: # M보다 작거나 같을 때 e 증가, 같을 때는 s를 증가시키든 상관없다.(둘 다 증가시켜도 된다.)
if sum == M:
cnt += 1
e += 1
sum += arr[e] # e가 배열을 넘어가면 한번 참조하긴 해야해서 위에 패딩을 넣어주었다.
else:
sum -= arr[s]
s += 1
print(cnt)
🔍 結果
Reference
この問題について([Baekjoon] 2003. 数の和2[S 3]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/Baekjoon-2003.-수들의-합2-S3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol