中野's workspace

  • Profile
  • Privacy
  • Contact

2021/10/31

B - Sum of Three Integersをpythonで解く

  • #atcoder

変わらず気が向いた時にAtCoder 版!蟻本 (初級編) をやっている(普段の業務では中々考えないところなので気分転換にとても良い)

今回解いた問題のリンクは↓
https://atcoder.jp/contests/abc051/tasks/abc051_b

整数K Sが与えられるので、

0 <= X,Y,Z <= K
X + Y + Z = S

を満たす組み合わせが何通りか調べろとのこと。

スマートな解法は分からないが、力業で大体解ける。
X,Y,ZでそれぞれKの値になるまでループして、X + Y + Z = Sになった回数を記録してあげればよい。
こんな感じで。

K, S = map(int, input().split())

ans = 0
for x in range(K + 1):
	for y in range(K + 1):
		for z in range(K + 1):
			if((x + y + z) == S):
				ans += 1

print(ans)

…が試しに提出してみるとTLE
書いている時点でなんか嫌な予感していたがやっぱりか…
なんとかループ量減らせないか考えてみた。
Z = S - (X + Y)で求まるので、Zが0 <= Z <= KであればX + Y + Z = Sを満たすと言えるため、Zでのループが不要になりそう。

早速やってみた。

K, S = map(int, input().split())

ans = 0
for x in range(K + 1):
	for y in range(K + 1):
		z = S - (x + y)        
		if (0 <= z) & (z <= K):
			ans += 1

print(ans)

無事AC

こういう考えは何回もやっていけば自然に身につくもんなのかなと思ったりした。
実務でも役に立ちそうだし、コンテスト参加するかどうかはさておき、継続していくと力になりそう。

ACしたもの
https://atcoder.jp/contests/abc051/submissions/26194558

このエントリーをはてなブックマークに追加
  • Copyright © 2019. Makoto Nakano
  • ALL Tags