題名のとおりです。
プログラミングをRubyで初めて楽しく学んでいる段階です。
しかしどうにもこうにもアルゴリズム系問題が苦手です。
思えばSPIや中学数学、小学校受験算数的な問題も苦手でした。
paizaなどの問題をやろうにもDランクレベルの問題で全く解き方が思いつかない、ということばかりです。
そこでなのですが、アルゴリズム系の問題を解く能力を付けたいと思っています。
0からの状態でも学べるようなおすすめのwebサイト、または書籍、また助言など頂けるとありがたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答12件
0
paizaのDランクが解けないって、それアルゴリズム以前に「書き方がわからない」レベルなのでは…
まあ書き方がわかるにしても、paizaのDランクの問題は、アルゴリズムなんていう大層なものではないです。人がやることをそのままコンピュータにやらせればいいだけの場合がほとんどです。
それが出来ないのは、そもそも「そのプログラミング言語でなにが出来るかがわからない」のではないでしょうか?
投稿2017/02/09 15:58
編集2017/02/11 01:26総合スコア20651
0
算数が苦手な方はアルゴリズムを身に着けるのに時間がかかるかもしれません。
逆に時間をかければ身につくので、楽しく学べているのであれば問題はないと思います。
さて、PaizaのDレベルであればアルゴリズムより文字列処理・パース・演算子・論理式の”使い方”に関する技術を求められていると思います。
まずは、Rubyの言語の本を一冊読みましょう。サンプルコードを一通り読めるようになる必要があるからです。
あと、判らないことをTeratail経由で質問してもらえばよいと思いますが、Paizaの問題を公開するのは問題があります。AtCoderのBeginnerContestの終了したものを開くと他の方の回答がみれますので、それを見て学ぶとよいかもしれません。
投稿2017/02/10 00:51
総合スコア2883
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/13 08:15
2017/02/15 10:46
0
アルゴリズム系の問題が解けるようになるには、
サイトや書籍で勉強することも大事だとは思いますが、普段の取り組み方が一番大事だと思いますよ。
- プログラミングをする前に何をプログラミングするのか「フローチャート」などを書いて、処理の流れなどを理解した上でプログラミングしていますか?
- 実際に書いたプログラムとフローチャートを比較して確認したりしていますか?
- 何かわからないことがあった場合に、何がわからないか他の人にきちんと説明できますか?
私の周りにもアルゴリズムを考えられない人や生産性の低い人がいますが、そういう人は大体、上記の作業をやっていません。
ソースコードしか見ずにプログラミングをして大体失敗しますし、ノートもほとんど意味がない内容ばかりメモを取っています。
アルゴリズムを考えられるか否かは、物によっては数学的な素養がないと難しいかもしれませんが、それ以外のものは「論理的に物事を考える」「自分が考えていることを整理整頓する」「物事を順序立てて考える」「自分がやったことをきちんと振り返る」と言ったことが日常的にできてる人であれば、ある程度経験を積むことで能力は向上すると思いますよ。
投稿2017/02/09 09:47
総合スコア237
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/12 22:46
2017/02/13 06:29
2017/02/15 10:34
2017/02/16 03:13
2017/02/16 10:59
0
同じような質問をした人もいます。
Rubyでアルゴリズムを学ぶのに適した書籍やサイトを教えてください
プログラマやSEは誰にでもできる仕事ではありません。適性があるか、
プログラマ 適性
などのキーワードでググってみては?
投稿2017/02/09 09:23
総合スコア16415
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/12 22:42
0
例えばこういう本はどうでしょう?
いかにして問題をとくか
投稿2017/02/09 09:10
総合スコア3579
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/09 09:17
2017/02/09 09:21
2017/02/10 02:58
2017/02/12 22:34
2017/02/13 09:15 編集
2017/02/13 09:13
2017/02/15 10:29
0
ベストアンサー
アルゴリズムをどう定義するか、どのようなものをアルゴリズムと考えているかによる部分はありますが、teratai には、初級編の質問に溢れていますw
最近盛り上がったのは、以下です。
「-3, -2, -1, 1, 2, 3」の6つの整数をランダムで得る「いい」方法
私は早々に見切りをつけ、配列最強説を唱えましたが、結果から見ると言語機能の使い方で、よりシンプルな方法が提示されました。
補足
シンプルな方法ということで、乱数の元は組み込まれた関数を使用するものとします。
すると乱数は連続する数値の範囲を指定することになります。
その前提で考えると、「-3, -2, -1, 1, 2, 3」を連続した数値に直すか、連続した順番で捉えるかの2択になるかと。
前者は多段な処理を行わなければならないのであまりシンプルな発想ではないと思います。
シンプルさで言えば、後者の配列として捉える方法が適解かと。
連続した数値に直す方法として、多くのシンプルな方法が提示されてしまいました^^;
アルゴリズム問題にあたって必要なのは
・問題を理解する能力(数学的理解)
・使用する言語の特性(プログラム的解釈)
の双方からのアプローチです。
どちらの能力も、件数をこなすことで、地味に伸びるものだと思います。
teratail で例に挙げたような課題は、「注目」タブに上がってきます。
祭りに参加すれば、楽しく能力アップにつながると思いますよ^^
投稿2017/02/12 22:59
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/12 23:23
退会済みユーザー
2017/02/12 23:58
退会済みユーザー
2017/02/13 00:16
2017/02/13 03:18
0
アルゴリズムとは「何かを行うときの手法」であり、手順そのものです。
何かをしようとしたときに、その「こと」をどんどん細分化して(逆にそれぞれのステージごとにやることは単純化される)いくことになります。
他の方が書かれている
- 流れ図を書いてみる
- 細かく分類する
というのは、そうすることで細分化の助けになるからです。
※流れ図を書いて大まかな動きを把握し、それをさらに細かくしていく感じです
と、こう書いてしまうといかにも難しそうですが、よく考えてください。
何をするにしてもアルゴリズムと言うか手順は付いて回るのです。
逆にいえば、貴方が普段生活する中で何げなく行っていることであっても、実際には複雑な手順の組み合わせなのです。
簡単なところだと、三目並べ(○×ゲーム)で、手を決めるアルゴリズムも、結構考えさせられます。
※このゲームは先攻・後攻の双方が最善手を打ち続けた場合、絶対に勝敗がつかないことが証明されています。昔を知る人ならば WAR GAMES を思い出すでしょう
投稿2017/02/09 10:45
総合スコア13703
0
ちょっと他の人と違うアポローチで
プログラム言語というのは、コンピューターの言葉(01)と人間の言葉
の均衡点というか妥協点なんです。
だからコンピューターも人間も割と理解しやすい
数学というものをベースに作っています。
なので数学が得意な人は、アルゴリズムを考えるのは得意です。
だから、プログラマーは数学が好きでないといけないとは思いませんが、
数学が嫌いだったり苦手だと、苦労すると思います。
特に文章題が、全然解けなかったという人は、別の道を考えるべきかもしれません。
散々なことを書きましたが、数学(算数)が嫌いだったり苦手だという意識は義務教育の時に
植えつけられたコンプレックスのようなものかもしれません。
というわけで、数学が楽しくなるかもしれない本を紹介します。数の悪魔
またこんなアプローチもいいかもしれません算数がメチャとくいになれる本
両方とも小学生向けの本ですが、大人が見ても楽しめます。
基本的なアルゴリズムや数学的思考は、算数、数学をやっていれば自然と身につきます。
質問者様はもしかしたら、数学の苦手意識から、その機会を逃してしまったのではないでしょうか
数学もプログラムも好きになること、楽しむことが一番の上達の早道かもしれません。
投稿2017/02/13 06:10
編集2017/02/13 06:16総合スコア2241
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/15 10:58
2017/02/15 11:29 編集
2017/02/16 11:22
0
この本がおすすめです。
何か目標がないと上達しないと思いますので、一度基本情報技術者を受験してみてはいかがでしょうか。
基本情報技術者 大滝みや子先生のかんたんアルゴリズム解法 流れ図と擬似言語 第3版 | 大滝 みや子 |本 | 通販 | Amazon
http://www.amazon.co.jp/o/ASIN/4897979668/hotuama-22
投稿2017/02/13 04:10
総合スコア114
0
例えば「コーヒーが飲みたい!」と思ったら・・・
・お湯を沸かしてコーヒーを点てる
・コンビニでコーヒーを買ってくる
・茶店(ファミレスw)に行く
・・・という手段(方法)があって・・・
(金欠だし;;、豆はあるから・・・)コーヒーを点てようと思ったら→
1.お湯を沸かす
2.ドリッパーを用意する
3.コーヒー豆を挽く
4.コーヒーを点てる
・・・などなど、飲み方にもいろいろな方法があるのですが・・・
上に書いたのは(コーヒーを飲む)為の手段で、下の番号を振ってあるのがコーヒーを飲むためのアルゴリズム(ちと大げさw)・・・で、どこで詰まっちゃうんでしょう??;
投稿2017/02/12 23:50
総合スコア6851
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/13 02:46
2017/02/13 08:34
2017/02/13 08:53
2017/02/13 08:57
2017/02/16 11:19
2017/02/16 11:20
0
遊んで学べる、基礎構文のアルゴリズムの組み立て方としておすすめなのがLightBotです。
http://jp.techcrunch.com/2013/06/27/20130626light-bot-teaches-computer-science-with-a-cute-little-robot-and-some-symbol-based-programming/
ただ、言語ですらないおもちゃのようなプログラミングですので、本当に「アルゴリズム」の組み立て方の力だけを鍛えるものです。それをRubyに落とし込むのはあなたの独力です。
投稿2017/02/10 00:18
編集2017/02/10 00:20総合スコア9206
0
中々、机に向かって勉強!というのは、心理的な抵抗や疲労感もあり大変かもしれませんね。
まずは、気負わずに考え方の訓練をしてみては如何でしょうか?
①まずは、適当な課題を1つ見つける
(よく研修なんかでやるのは自動販売機の例ですね)
②一つ一つの要素をできる限り、下記の様に細かく分解してみる。
(ざっくり例)
(お金を入れる⇒
入れられたものが通貨かどうかを確認する⇒
お金の種類を分類する⇒
お金を集計する⇒
購入可能な商品を表示する⇒
お釣りを計算する⇒
お釣りの残額で購入可能な商品があれば、再度購入可能な商品を表示する⇒
お釣りを出すように選択されるまたは、お釣りの残額で購入可能な商品が無ければお釣りを出す)
③フローチャート等を使って漏れやダブりがないか(MECEになるか)どうか、チェックしながら想定通りの動きを本当にするのかを検討する
この①~③の流れを日常の中で、考えながら楽しめるといいかもしれません。
投稿2017/02/09 09:21
総合スコア3027
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/02/10 00:14
2017/02/10 02:56
2017/02/12 23:02
2017/02/12 23:59
2017/02/15 10:42
2017/02/15 12:15
2017/02/16 11:01