- 投稿日:2021-01-07T23:30:44+09:00
Goでアルゴリズムを学ぶ@全検索_線形検索法
Go基礎構文の理解と、アルゴリズム脳トレが目的です。
アルゴリズムについて
全検索とは
可能性をすべて調べ上げて問題を解決する手法です。
しらみつぶしに全て調べる手法ですね。仕事においても、問題に対して原因の切り分けができないときは多用してます。線形検索法とは
一つ一つの要素を順番に調べていく検索方法です。
とりあえず頭から尻まで調べるといった、全検索の中で最も泥臭い部類じゃないでしょうか。サンプルコード
ひとまずコード載せます。
main.gopackage main import "fmt" func main() { l := []int{1, 2, 3, 4, 5} m := 5 r := solve(l, m) fmt.Printf("%v", r) } func solve(a []int, b int) string { r := "NG" for i := 0; i < len(a); i++ { if a[i] == b { r = "ok" } } return r }簡単に解説
int型のスライス(配列)の中に特定の数値が含まれているか調べるコードです。
最初から最後の要素まで調べつくします。l := []int{1, 2, 3, 4, 5} m := 5上記の時はfor文の最後のループ処理で数値が含まれていることを確認できましたが、
l := []int{1, 2, 3, 4, 5} m := 1このような場合は最初のループ処理以外は無駄な処理をしていますね。なので、以下のように書くほうが最適でしょう。
if a[i] == b { r = "ok" break }感想
とにかく全部調べるって単純で好きです。
- 投稿日:2021-01-07T00:01:53+09:00
Go言語の条件分岐
Goの条件分岐
プログラミング基本からGoの理解を文字におこして行こうと思います!
Go言語の基本❶はこちら
Go言語の基本❷はこちら条件分岐とは
ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変えるif文
package main func main(){ score := 100 if score > 60 { println("合格") //条件が成り立つ時の処理 } } //コンソール 合格if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能
if文の条件式
package main func main(){ score := 100 if score >= 60 { println("合格") //scoreが60より大きい時、もしくは等しい時に成り立つ } } //コンソール 合格if文は、if 条件式 { 処理 } というように記述
真偽値
package main func main(){ score := 70 println(score>60) println(score>80) } //コンソール true false「真偽値型」には「true」と「false」という2つの値が存在
比較演算子を用いた条件式は、成り立つときは「true」
成り立たないときは「false」という値比較演算子
package main func main(){ score := 100 if score == 100 { //scoreが100の時true } }x == y 左右の値が等しい時 true x != y 左右の値が等しくない時 true比較演算子→等しいか調べる
代表的な比較演算子
//等しいか調べる x == y 左右の値が等しい時 true x != y 左右の値が等しくない時 true //大小を比べる x < y 右辺の方が大きい時 true x > y 右辺の方が小さい時 true x =< y 右辺の方が大きい、等しい時 true x >= y 右辺の方が小さい、等しい時 trueelse(条件に一致しない場合の処理)
package main func main(){ score := 50 if score > 80 { println("合格") } else { println("失格") //条件式の結果がfalseの時に実行 } } //コンソール 失格if文に「else」を組み合わせることで
「もし○○ならば●●を行う、そうでなければ▲▲を行う」という条件分岐ができるelse if(条件に一致しない場合、さらに条件分岐したい場合)
package main func main(){ score := 50 if score == 100 { println("卒業") } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 追試else ifを用いると
「もし○○ならば●●を行う、△△ならば▲▲を行う、
どちらでもなければ□□を行う」という処理ができるelse if(2)
package main func main(){ score := 100 if score == 100 { println("卒業") //以降の処理は実行されない } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 卒業「else if」はいくつでもつなげて書くことができる
上から順に条件が成り立つか判断され
最初に条件に合致した部分の処理だけが行われるelse if(2)
package main func main(){ score := 100 if score == 100 { println("卒業") //以降の処理は実行されない } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 卒業かつ(&&)
package main func main(){ time := 12 if time > 10 && time < 19 { println("仕事開始") } }&&を用いて複数の条件式を組み合わせると
全ての条件式がtrueの場合のみ全体としてtrueになる//論理演算子 true && true true true && false false false && true false false && false falseまたは(||)
package main func main(){ time := 15 if time == 10 || time == 15 { println("おやつタイム") } }||を用いて複数の条件式を組み合わせると
複数の条件式のうち1つでもtrueであれば全体がtrueになる//論理演算子 true || true true true || false true false || true true false || false false否定(!)
package main func main(){ time := 15 if !(time == 16) { println("おやつタイムではない") } }!(条件式)とすると
条件式が「true」であれば「false」に、「false」であれば「true」switch文
swich 条件の値 { case 値1: //処理 case 値2: //処理 case 値2: //処理 }条件分岐にはif文のほかに、switch文という構文もある
条件の値がcaseの値と一致するとき、処理が実行caseの後ろのコロン(:)などは忘れがちなので注意
if文とswitch文
//if文 x := 8 if x % 2 == 0 { println("偶数です") } else if x % 2 == 1 { println("奇数です") }//switch文 x := 8 switch x % 2 { case 0: //一致 println("偶数") //実行 case 1: println("奇数") }switch文は「とある値(今回はx % 2)が何であるか」で処理を分けたいとき
(特にその分岐が多いとき)、if文よりシンプルに書ける場合がある複数の値を指定する
//if文 year := 1994 if year == 1994 || year == 2005 { //1994がtrue println("私が産まれた年") }else if year == 2000 { println("弟が産まれた年") }//switch文 year := 1994 switch year { case 1994,2005: //1994に一致 println("私が産まれた年") //実行 case 2000: println("弟が産まれた年") }caseのあとの値は、コンマ(,)を用いて複数指定することができる
コンマで複数の値を指定すると
switchの値がいずれかに一致すれば、そのcaseの処理が実行default
//if文 if rank == 1 { println("優勝") } else if rank == 2 { println("準優勝") } else if rank == 3 { println("3位") } else { println("最下位") }//switch文 switch rank { case 1: println("優勝") case 2: println("準優勝") case 3: println("3位") default: println("最下位")どのcaseとも一致しなかったときに実行する処理を、defaultに指定できる
if文のelseに似ている
- 投稿日:2021-01-07T00:01:53+09:00
Go言語-条件分岐
条件分岐
プログラミング基本からGoの理解を文字におこして行こうと思います!
Go言語の基本❶はこちら
Go言語の基本❷はこちら条件分岐とは
ある条件に当てはまるかどうかによって処理を分ける
例えば、明日の天気(条件)によって傘を持っていくか(処理)を変えるif文
package main func main(){ score := 100 if score > 60 { println("合格") //条件が成り立つ時の処理 } } //コンソール 合格if文を用いると「もし○○ならば☓☓を行う」という条件分岐が可能
if文の条件式
package main func main(){ score := 100 if score >= 60 { println("合格") //scoreが60より大きい時、もしくは等しい時に成り立つ } } //コンソール 合格if文は、if 条件式 { 処理 } というように記述
真偽値
package main func main(){ score := 70 println(score>60) println(score>80) } //コンソール true false「真偽値型」には「true」と「false」という2つの値が存在
比較演算子を用いた条件式は、成り立つときは「true」
成り立たないときは「false」という値比較演算子
package main func main(){ score := 100 if score == 100 { //scoreが100の時true } }x == y 左右の値が等しい時 true x != y 左右の値が等しくない時 true比較演算子→等しいか調べる
代表的な比較演算子
//等しいか調べる x == y 左右の値が等しい時 true x != y 左右の値が等しくない時 true //大小を比べる x < y 右辺の方が大きい時 true x > y 右辺の方が小さい時 true x =< y 右辺の方が大きい、等しい時 true x >= y 右辺の方が小さい、等しい時 trueelse(条件に一致しない場合の処理)
package main func main(){ score := 50 if score > 80 { println("合格") } else { println("失格") //条件式の結果がfalseの時に実行 } } //コンソール 失格if文に「else」を組み合わせることで
「もし○○ならば●●を行う、そうでなければ▲▲を行う」という条件分岐ができるelse if(条件に一致しない場合、さらに条件分岐したい場合)
package main func main(){ score := 50 if score == 100 { println("卒業") } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 追試else ifを用いると
「もし○○ならば●●を行う、△△ならば▲▲を行う、
どちらでもなければ□□を行う」という処理ができるelse if(2)
package main func main(){ score := 100 if score == 100 { println("卒業") //以降の処理は実行されない } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 卒業「else if」はいくつでもつなげて書くことができる
上から順に条件が成り立つか判断され
最初に条件に合致した部分の処理だけが行われるelse if(2)
package main func main(){ score := 100 if score == 100 { println("卒業") //以降の処理は実行されない } else if score >= 60 { println("合格") } else { println("追試") } } //コンソール 卒業かつ(&&)
package main func main(){ time := 12 if time > 10 && time < 19 { println("仕事開始") } }&&を用いて複数の条件式を組み合わせると
全ての条件式がtrueの場合のみ全体としてtrueになる//論理演算子 true && true true true && false false false && true false false && false falseまたは(||)
package main func main(){ time := 15 if time == 10 || time == 15 { println("おやつタイム") } }||を用いて複数の条件式を組み合わせると
複数の条件式のうち1つでもtrueであれば全体がtrueになる//論理演算子 true || true true true || false true false || true true false || false false否定(!)
package main func main(){ time := 15 if !(time == 16) { println("おやつタイムではない") } }!(条件式)とすると
条件式が「true」であれば「false」に、「false」であれば「true」switch文
swich 条件の値 { case 値1: //処理 case 値2: //処理 case 値2: //処理 }条件分岐にはif文のほかに、switch文という構文もある
条件の値がcaseの値と一致するとき、処理が実行caseの後ろのコロン(:)などは忘れがちなので注意
if文とswitch文
//if文 x := 8 if x % 2 == 0 { println("偶数です") } else if x % 2 == 1 { println("奇数です") }//switch文 x := 8 switch x % 2 { case 0: //一致 println("偶数") //実行 case 1: println("奇数") }switch文は「とある値(今回はx % 2)が何であるか」で処理を分けたいとき
(特にその分岐が多いとき)、if文よりシンプルに書ける場合がある複数の値を指定する
//if文 year := 1994 if year == 1994 || year == 2005 { //1994がtrue println("私が産まれた年") }else if year == 2000 { println("弟が産まれた年") }//switch文 year := 1994 switch year { case 1994,2005: //1994に一致 println("私が産まれた年") //実行 case 2000: println("弟が産まれた年") }caseのあとの値は、コンマ(,)を用いて複数指定することができる
コンマで複数の値を指定すると
switchの値がいずれかに一致すれば、そのcaseの処理が実行default
//if文 if rank == 1 { println("優勝") } else if rank == 2 { println("準優勝") } else if rank == 3 { println("3位") } else { println("最下位") }//switch文 switch rank { case 1: println("優勝") case 2: println("準優勝") case 3: println("3位") default: println("最下位")どのcaseとも一致しなかったときに実行する処理を、defaultに指定できる
if文のelseに似ている