タムログ

プログラミングについての情報発信をしていきます!

JSUTC202004 A

 

さて,今日はAtCoderの負荷テストがありましたね。今回はA~Dまでの比較的簡単めな内容とchokudaiさんがTwitterでつぶやいておられましたが,C問題で少し躓いてDまで解ききれませんでした。(笑)
結構ショックですが,とりあえず早速解説していきます。
https://atcoder.jp/contests/judge-update-202004/tasks/judge_update_202004_a

A – Walking Takahashi


実行時間制限: 2 sec / メモリ制限: 1024 MB

配点 : 100 点

問題文

数直線上で生活している高橋君は、いま座標 S にいます。座標が L 以上 R 以下の区間は日当たりが良いです。

日に当たりたい高橋君は座標が L 以上 R 以下になるまで次のような移動を繰り返します。

  • 現在の座標を X として、L≤X≤R のとき移動をやめる。X が L 未満のとき、X+1 に移動する。X が R より大きいとき、X−1 に移動する。

高橋君が最終的に移動をやめる座標を求めてください。

制約

  • −100≤S≤100
  • −100≤L≤R≤100
  • 入力は全て整数である

入力

入力は以下の形式で標準入力から与えられる。

S L R

出力

高橋君が最終的に移動をやめる座標を出力せよ。

解説

今回の座標の変化は,

  • L≤S≤R の時,もともと範囲内なので移動しない
  • S<L の時,1ずつ増えていって最終的に L に到達した時点で移動をやめる
  • R<S の時,1ずつ減っていって最終的に R に到達した時点で移動をやめる

この3パターンしかありませんよね。
なので,それぞれ場合分けして丁寧に出力すればいいわけです。

解答

s,l,r = map(int, input().split())
 
if s >= l and s <= r:
    print(s)
elif s < l:
    print(l)
else:
    print(r)