論理問題:プログラマーに必要な『論理的思考力(ロジカル・シンキング)』を身につけよう!
会社で上司に報告をするとき、取引先の相手にプレゼンをするとき。相手にわかりやすく、順序立てて話をする力ってとっても必要とされますよね。
それは対人でなく、対コンピューターなプログラマーも同じ。プログラムを作るうえで、物事を論理的に考える力はとても大切です。
そこで、今回は『論理的思考力(ロジカル・シンキング)』を身につける為の問題を、いくつかご紹介してみようと思います。
論理問題:プログラマーに必要な
『論理的思考力(ロジカル・シンキング)』を身につけよう!
そもそも論理的な思考ってなんでしょうか?
ある有名なお話があるので読んでみてください。
ジョーは酒場で論理学の教授と知り合った。
「論理学ってのはどういったもんですか?」
「やって見せましょうか。お宅には芝刈機があります?」
「ありますよ」
「ということは、広い庭があるわけですね?」
「その通り!うちには広い庭があります」
「ということは、一戸建てですね?」
「その通り!一戸建てです」
「ということは、ご家族がいますね?」
「その通り!妻と2人の子供がいます」
「ということは、あなたはホモではないですね?」
「その通り!ホモじゃありません」
「つまりこれが論理学ですよ」
「なるほど!」
深く感心したジョーは、翌日友人のスティーブに言った。
「論理学を教えてやろう。君の家には芝刈機があるか?」
「いや。ないよ」
「ということは、君はホモだな!!」
聞いたことあるお話でしたか?オチはジョークですね(笑)
順序立てて推測していく教授に反して、論理的な思考がわからないジョーは端的に中身をすっ飛ばして解釈してしまったというお話です。
ポイントは『物事の繋がりを考えて、ひとつずつ順番に並べていき、その先の答えを導く』ということですね。
論理問題
では、比較的有名な論理問題を3つ後紹介しようと思います。
- 川渡り問題
- 3人の美女
- 消えた1ドル
ヒントはなし。スクロールした先に答えが書いてあるので、出来るだけ自分で頑張って解いてみてください。
1. 川渡り問題
あなたは「オオカミ」と「羊」と「キャベツ」を連れて旅をしています。
目の前に川がありボートがあるのですが、ボートにはあなた以外に「オオカミ」か「羊」か「キャベツ」のどれか1つしか乗せられません。
- あなたがいなくなると「オオカミ」は「羊」を食べてしまいます
- あなたがいなくなると「羊」は「キャベツ」を食べてしまいます
みんな無事に向こう岸に渡るにはどうすればいいでしょう?
↓ ↓ ↓ 答え ↓ ↓ ↓
- ←:羊を乗せていく
- →:何も乗せないで戻る
- ←:オオカミを乗せていく
- →:羊を乗せて戻る
- ←:キャベツを乗せていく
- →:何も乗せないで戻る
- ←:羊を乗せていく
この『川渡り問題』はロジカル・シンキングでよく聞く問題です。登場人物は「オオカミ・ヤギ・キャベツ」だったり、「オオカミ・ウサギ・人参」だったりします。
「オオカミ」と「キャベツ」を乗せていく順番は逆でも構いません。途中で「羊」を乗せて戻るのがキーポイントです。
2. 3人の美女
3人の美女がいます。
実は「天使」「悪魔」「人間」が1人ずつです。
- 「天使」は常に本当 のことを言います。
- 「悪魔」は常に嘘を言います。
- 「人間」は本当か嘘か、時によって使い分けます。
では、3人 の言うことを聞いてそれぞれの正体を見破ってください。
- 金髪の美女「私は悪魔じゃありません」
- 黒髪の美女「私は天使じゃありません」
- 茶髪の美女「私は人間じゃありません」
↓ ↓ ↓ 答え ↓ ↓ ↓
- 金髪の美女=悪魔
- 黒髪の美女=人間
- 茶髪の美女=天使
≪ 悪魔:嘘しか言わない ≫
「天使じゃない」「人間じゃない」というと真実になってしまうので、金髪が悪魔です。
- ○:金髪の美女「私は悪魔じゃありません」
- ×:黒髪の美女「私は天使じゃありません」
- ×:茶髪の美女「私は人間じゃありません」
≪ 天使:真実しか言わない ≫
「天使じゃない」というと嘘になってしまうので、茶髪が天使です。
- ○:金髪の美女「私は悪魔じゃありません」
- ×:黒髪の美女「私は天使じゃありません」
- ○:茶髪の美女「私は人間じゃありません」
≪ 人間:嘘も真実も言う≫
どのパターンもありえますが、消去法で残った黒髪が人間です。
- ○:金髪の美女「私は悪魔じゃありません」
- ○:黒髪の美女「私は天使じゃありません」
- ○:茶髪の美女「私は人間じゃありません」
3. 消えた1ドル
3人の男がホテルに入りました。ホテルの主人が、一晩30ドルの部屋が空いていると言ったので、3人は10ドルずつ払って一晩泊まりました。
次の朝、ホテルの主人は部屋代が本当は 25ドルだったことに気がついて、余計にもらった分を返すようにと、ボーイに5ドルを手渡しました。
ところがこのボーイは「5ドルでは3人で割り切れない」と考ええ、ちゃっかり2ドルを自分のふところに納め、3人に1ドルずつ返しました。
さて、整理してみましょう。
3人の男は結局部屋代を9ドルずつ出したことになり、計27ドル。
それにボーイのくすねた2ドルを足すと29ドル。
あとの1ドルはどこへいってしまった のでしょう?
↓ ↓ ↓ 答え ↓ ↓ ↓
答えは…「初めから1ドルは消えてはいない」です!!
実はこれ、問題文そのものが間違っています。
どこがおかしいかというと…
部屋代は27ドルから2ドルを引いた25ドルです。
部屋代の27ドルに2ドルを足して29ドルと してしまうのが、間違っているのです。
≪ 正しい計算 ≫
支払った部屋代 ( 9ドル × 3人 = 27ドル )= 本当の部屋代 ( 25ドル ) + ボーイがくすねた金額 ( 2ドル )
これは、書かれている文章を素直に読んでしまう先入観から、本質を読み誤ってしまうという良い例ですね。
書いてあることを素直に真に受けないで、疑ってかかることも時には大切です。テスターさんなんかは特にこの視点が大事ですね!
論理問題の紹介サイト
いくつ自力で解けましたか?
最後に論理問題を紹介しているサイトさんや、ロジカル・シンキングについて書いてあるサイトさんをご紹介しておきますので、お時間のある方は解いてみてください。
- 論理問題 (今回、こちらのサイトさんから問題を引用しました!)