質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1512閲覧

pythonのコーディング問題のアルゴリズム

korr

総合スコア23

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/01/23 10:44

編集2019/01/23 11:20

文字列 s を最大 N 回箱を回転させることで、文字列 t を作るようなアルゴリズムが分かりません。出力は回転した回数です。

入力される値

N t s 5 apple pleap

期待する出力

3

以下のように考えましたが、うまく出力されませんでした。

s = input().rstrip().split(' ') count = 0 if s[1] == s[2]: // 既に合っているとき print(0) for w in s[0]: list = [] for i in s[2]:  list.append(i) // 回転する文字列をリストに格納 first = list[0] // リストの最初の文字を取得 del list[0]      // リストの最初の文字を消去 list.append(first)  // 最初の文字をリストの一番後ろに追加 mojiretu = ''.join(list) // リストから文字列へ count += 1         // 回転した回数を格納 s[2] = mojiretu if mojiretu == s[1]: print(count)

よろしくお願い致します。

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

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

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

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

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

azuapricot

2019/01/23 11:10

ちょっとくらい自分でかんがえましょー
korr

2019/01/23 11:21 編集

編集いたしました!
guest

回答2

0

s + s の文字列を作って t と合致する箇所の位置を調べるとイイってこないだどっかの回答に出てた。

投稿2019/01/23 11:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

korr

2019/01/23 11:28

賢すぎます!教えていただきありがとうございます。
退会済みユーザー

退会済みユーザー

2019/01/23 11:29

かしこいよねぇw だから覚えてたw
guest

0

ベストアンサー

文字列を実際に一致するまで回転すればいいのではないでしょうか?

python

1from collections import deque 2N = 5 3src = 'pleap' 4dst = 'apple' 5 6 7def func(src, dst, N): 8 src = deque(src) 9 dst = deque(dst) 10 11 for i in range(1, N + 1): 12 src.rotate(-1) # 左に1つシフト 13 if src == dst: 14 return i 15 return False # 規定回数内で一致せず 16 17print(func(src, dst, N))

ちなみに配列のシフトは、「要素を消して、追加して」としなくとも、配列を切り貼りすればいいです。

python

1l = [1, 2, 3, 4, 5] 2# 左にシフト 3print(l[1:] + l[:1]) # [2, 3, 4, 5, 1] 4# 右にシフト 5print(l[-1:] + l[:-1]) # [5, 1, 2, 3, 4]

投稿2019/01/23 11:05

編集2019/01/23 11:37
tiitoi

総合スコア21954

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

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

korr

2019/01/23 11:12

rotateを知らなかったため、ここまで書いたのですが出力されませんでした。 s = input().rstrip().split(' ') count = 0 if s[1] == s[2]: print(0) for w in s[0]: list = [] for i in s[2]: list.append(i) first = list[0] del list[0] list.append(first) mojiretu = ''.join(list) count += 1 s[2] = mojiretu if mojiretu == s[1]: print(count) どこがおかしいのでしょうか?よろしくお願い致します。
tiitoi

2019/01/23 11:14

インデントが崩れて読めないので、コメント欄でなく、質問を編集して追記していただけますか?
korr

2019/01/23 11:21

すいません。編集いたしました。
tiitoi

2019/01/23 11:28

コードを見ましたが、まず for w in s[0] がおかしいですよね s[0] は '5' という長さ1の str 型です。 なので、おそらく for w in range(int(s[0])) とする必要があるかと思います。
korr

2019/01/23 11:36

出来ました!丁寧に教えていただきありがとうございます。
tiitoi

2019/01/23 11:40

蛇足ですが、回答に追記したように配列をつなぎ直せば、回転できます。
korr

2019/01/23 11:44

ありがとうございます!参考にします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問