このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集の日付セットから「令和を数える (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
常用漢字からなる文字列が与えらるので、文字列に含まれる”令和”の数を数えてください。
入力される値
以下の形式で、文字列Sが1行で与えられます。
1 |
S |
期待する出力
与えられた文字列に含まれる”令和”の数を1行で出力してください。
条件
すべてのテストケースにおいて、以下の条件を満たします。
- 1≦|S|≦100000 (|S|は文字列Sの文字数を表します)
- Sを構成する文字は常用漢字です。
※ご利用のプログラミング言語によっては日本語の扱い方が複雑になる場合があるのでご注意ください。
※入力で与えられるデータの文字コードはUTF-8です(平成22年に制定された常用漢字のうち、UTF-8の4バイト文字の””を除く2135文字から選んで与えれます。)
考え方
String 型のメソッドを使うことも考えたが、ここは逐一「令和」と連続して出現する回数をカウントした方が、最終的な処理速度は早くなりそうなので、その手法を採用した。 if-else で記述するよりも、 switch-case-where で条件節を併用した方が見通しがよい感じがする。解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
let ss = readLine()! var count = 0 var flag = false for s in ss { switch s { case "和" where flag: count += 1 flag = false case "令": flag = true default: flag = false } } print(count) |