🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

2回答

345閲覧

atcoder  問題 WA 原因

nkmur

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/10/05 14:42

下記リンクの問題を解き下記のソースコードを提出したのですがWA判定となってしまいました。
その原因が知りたいです。
問題

python3

1import math 2S = list(input()) 3K = int(input()) 4i = 0 5 6for x in range(len(S)): 7 if x>0: 8 if S[x-1] == S[x]: 9 i += 1 10 11if S[0] == S[len(S)-1]: 12 i += 1 13 14i = math.ceil(i/2) 15if len(S)>1: 16  i *= K 17 18print(i)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maai

2019/10/05 16:18

AtCoderの問題ならば、提出URLがあると嬉しいです
guest

回答2

0

if S[0] == S[len(S)-1]: i += 1

は繰り返すときの最後の文字置き換えを考慮していると思いますが
以下のケースを考える必要があります。
・K=1の時は演算不要
・前のループで最後の文字を置き換える場合は連続しなくなるためそれの考慮が必要
例えばS="aa", K=2の場合、"aaaa"の置き換え結果は"a?a?"です(?は任意文字)。終端文字を置き換えるため始端とはマッチしません。

i = math.ceil(i/2)

は連続した文字列である場合、カウントを半分に減らす実装と思いますが
必ず半分に減らしていいわけではありません。
例:"aaa"であれば隣接回数2だが"a?a"となるため1回にする
ですが"aabb"の場合、隣接回数2ですが"a?b?"となり2回を維持する必要があります。
単純に割っていいわけではないのでループの中で考慮するべき内容かと思います。

あとlen(S)=1、K>=3の場合の考慮がいるかなと思います。
例えば、K="a" K=3の場合、文字列は"aaa"となり、"a?a"と置き換える必要があります。

上記を考慮するとこんなコードになるかなと思います。

Python

1S = list(input()) 2K = int(input()) 3i = 0 4 5if len(S) == 1: 6 i = int(K/2) 7else: 8 9 #隣接する文字をカウント(連続は除く) 10 last_char = S[0] 11 for x in range(1, len(S)): 12 if last_char == S[x]: 13 last_char = '?' # Sは英小文字なので次回はマッチしない 14 i += 1 15 else: 16 last_char = S[x] 17 18 # 繰り返しを考慮 19 i *= K 20 21 # 繰り返しにより離接する箇所を考慮 22 if (K > 1) and (S[0] == last_char): 23 i += K-1 24 25print(i)

投稿2019/10/05 23:09

nomuken

総合スコア1627

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

...aaa...のような文字列が与えられたときは、真ん中のaをbに変更すればよいので1回の操作で済むのですが、上記のプログラムではここで2回分カウントされてしまっています。
また、端点のカウントも、s[0]とs[n-1]だけ見ればよいわけでなく、s[0]から何文字同じ文字が連続しているか、s[n-1]から何文字後ろに同じ文字が連続しているかを数えなければいけません。
atcoderでは他の方の回答も見られますし、解説動画も公開されているのでご参考にされると良いと思います。

投稿2019/10/05 16:04

gnbrganchan

総合スコア438

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問