Pythonでの多重ループの抜け方 -競技プログラミングのテクニック01-

プログラミング

どーも、masukenです。

最近は競技プログラミングに取り組んでいます。

僕はまだまだ初心者であるため、とりあえずは問題数をこなして
分からなかった問題や、参考になったコードを復習しています。

今は、動的計画法やAtCoderBeginnerSelectionの問題を行なっています。

今回は、AtCoderBeginnerSelectionの問題を解いている中で、
多重ループの抜け方が分からなかったので、それについて復習したいと思います。

スポンサーリンク

ABC085 C Otoshidama

ABC085 C Otoshidama

この問題では、お札の枚数Nとその合計金額Y円が与えられています。
全探索で解こうと思うと、10000円札、5000円札の枚数をそれぞれi, jとしてfor文で回せば、
1000円札の枚数はN-i-jで表すことができます。

この時、N < 2000 であるため、2重for文を回しても計算時間は間に合いそうです。

以下は僕が書いたコードとなります。

出力では、合計金額がY円となるお札の枚数を1例だけ出力します。
そのため、全探索をして解が見つかればforループから抜ける必要があります。

ただし、気を付けなければいけないのは、break文でforループを抜けたとしても
2重のforループの内側しか抜けられないということです。

そのため、ここから多重ループを抜ける方法を紹介したいと思います。

多重ループを抜ける方法

for-else-break

forとelseとbreakを組み合わせることで、多重ループから抜けることができます。
以下、具体例です。

このコードでは、内側のfor文の最後にelseがかかっています。
このコードが意味するのは、内側のfor文が最後まで回ればelse文の後ろが実行されるということです。
つまり、ここではcontinue文が実行されます。

もし、内側のfor文のif文を満たした時にはbreakで内側のfor文から抜けるため、
elseの後ろにあるbreakに到達し、外側のfor文から抜けることができます。

if flag is True:

if文とflagを使って多重ループから抜けることができます。

内側のfor文において、if文の条件を満たしていない時には、flag = Falseとなっているため、
10行目のif文の条件を満たすことはありません。

しかし、内側のfor文のif文を満たし、flag = Trueとなれば、
10行目のif文の条件を満たすため外側のfor文から抜けることができます。

exit()

exit関数を用いることでforループから抜けることができます。
多分、これが一番簡単です。

exit関数はプログラムを終了させる役割を持っています。
そのため、上のコードでは内側のif文の条件を満たし、exit()が実行されるとそこでプログラムが終了します。

そのため、出力はprint(‘finish’)が実行された後に終了するため、
finishを出力して終了することができます。

まとめ

本記事では、pythonにおける多重ループの抜け方について紹介しました。

これからも自分の備忘録として競技プログラミングで使うテクニックを
ブログに投稿していきたいと思います。

それでは、また。

コメント

タイトルとURLをコピーしました