こんにちは。KOUKIです。
とあるWeb系企業でGoエンジニアをしています。
Golangでアルゴリズムの学習をしましょう!
今回は、任意の文字列を逆順に並び替えるアルゴリズムを考えてみます。

課題
例えば、「Hi, My name is Selfnote!」という文字列が与えられたとします。
この文字列を「!etonfleS si eman yM ,iH」に書き換える(reverse)プログラムを作成しましょう。
ヒント: 文字へのアクセスについて
Golangでは、以下のようにすれば1文字ずつアクセスできます。
1 2 3 4 5 6 7 8 9 |
package main import "fmt" func main() { keyword := "Hi, My name is Selfnote!" fmt.Println(string(keyword[0])) fmt.Println(string(keyword[1])) } |
1 2 3 |
$ go run reverse/main.go H i |
ただし、keyword[0]で出力される値はbyte型なので、stringに変換する処理が必要です。
reverse処理の実装
それでは、reverse処理を実装します。
1 2 3 4 5 6 7 8 |
func reverse(str string) string { backwords := "" totalItems := len(str) - 1 for i := totalItems; i >= 0; i-- { backwords += string(str[i]) } return backwords } |
こんな感じですね。実装できたでしょうか?
文字列のアクセスは「0」から始まるのでtotalItemsには「文字列-1」の数値を格納しそれをループで回す、ただそれだけです。
プログラムを実行してみましょう。
1 2 |
$ go run reverse/main.go !etonfleS si eman yM ,iH |
OKですね。
もちろん正解は一つではありません。goの組み込みパッケージを使うやり方、別のアルゴリズムで処理するやり方など色々方法はあると思いますので、別の方法でもぜひチャレンジしてみてください。
おわりに
処理は単純ですが、実装しようとすると意外に「あれ?どうやるんだろう?」となる代表的なアルゴリズムです。
アルゴリズムを学べば綺麗なコードが書ける。綺麗なコードがかければバグが少なくなる、保守が楽になる。そして、上級プログラマーになれます^^
頑張ってアルゴリズムを学習しましょう!
それでは、また!
Go記事まとめ
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
package main import "fmt" func reverse(str string) string { backwords := "" totalItems := len(str) - 1 for i := totalItems; i >= 0; i-- { backwords += string(str[i]) } return backwords } func main() { keyword := "Hi, My name is Selfnote!" fmt.Println(reverse(keyword)) } |
コメントを残す
コメントを投稿するにはログインしてください。