lab2Gがプログラミングするブログ

lab2Gがプログラミングします AtCoderさんとこの問題を解いていくのが中心です

COLOCON 2018 Final B問題 異世界数式

 はじめまして、以前からこういったプログラミングしてく感じのブログを開設しようと考えていたのですが、この度Atcoderさんで競技プログラミングをしていて初めて400点問題が解けた記念(?)に開設いたしました
やったー!
いっつもD問題躓いて死んでて草

 競技プログラミングは数年前Cで挑もうとして、何もできなくて投げ出してたのですが、最近久しぶりに去年1年学んだPythonで挑んだらその頃よりずっとサクサクできてハマってしまいましたw(因みにPythonは言語処理100本ノックさんを通じて学びました)

 とは言っても学部の頃とは違って研究室の進捗を生まねばならないのですが💦💦💦
ウウ〜〜〜〜〜論文が読めませ〜〜〜〜〜ん

 「続きを読む」から今回解けた問題についてお話します


問題ページ

B - 異世界数式

問題文

非常に長いので省略 簡単に話すと
[演算子] ( [式] , [式] ) の形を ( [式] [演算子] [式] ) になおせ!
みたいな話です

問題について

学科の課題でやるコンパイラ設計みたいな問題に感じました
句構造解析みたいな(?)

方針

  • 括弧の開きでレベルアップ、閉じでレベルダウンとし、構造を制御
  • 異世界の数式として正しい文字列」とあり、演算子の直後に括弧が開くとあるので、読んだ演算子の配列(ope)をつくり、これのindexとレベル(level)を対応させる

ソースコード

S = input()

level = 0
ope = ["+","-","*","/"]
o = []
output = ""

for s in S:
    if s=="(":
        level += 1
        output += s
    elif s==")":
        level -= 1
        output += s
        o.pop(level)
    elif s==",":
        output += o[level-1]
    elif s in ope:
        o.append(s)
    else:
        output += s
        
print(output)

感想

(個人的には)下手な300点問題よりも簡単に感じました
「もっと苦戦した問題貼れ!」って話ですが、これからは苦労の連続が予想されるので、乗り越える度にブログを更新し途絶えないようにしたいです 競プロ(解けると)楽しい!


おそらくこんな感じで解いた問題のレビューを行なっていくと思います 他にもラクガキ載せれたらいいな〜
どんな方が今後見てくださるかわかりませんが、下級生の皆様は今のうちに競プロ始めましょう
Pythonはいいぞ
今度別記事で自分のコーディング環境載せようと思います (個人的には)すごい手軽で快適です
というか自分の環境に限らず今Webやブラウザ上でかなり快適にプログラミングできるんですね〜 やばいですね!(某社会派ゲーム)

それではまた