작성일 :

문제 링크

32068번 - 보물 찾기

설명

정해진 이동 규칙에 따라 위치를 조사할 때 보물에 처음 도달하는 단계를 구하는 문제입니다.


접근법

조사하는 위치는 시작점에서 오른쪽 1칸, 왼쪽 1칸, 오른쪽 2칸, 왼쪽 2칸 순으로 점점 멀어집니다.

따라서 오른쪽 보물과 왼쪽 보물에 도달하는 단계를 각각 계산하고, 더 빨리 도달하는 값을 출력합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Text;

class Program {
  static void Main() {
    var t = int.Parse(Console.ReadLine()!);
    var sb = new StringBuilder();
    for (var i = 0; i < t; i++) {
      var parts = Console.ReadLine()!.Split();
      var l = int.Parse(parts[0]);
      var r = int.Parse(parts[1]);
      var s = int.Parse(parts[2]);

      var stepR = 2 * (r - s);
      var stepL = 2 * (s - l) + 1;
      sb.AppendLine(Math.Min(stepR, stepL).ToString());
    }
    Console.Write(sb.ToString());
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  int t; cin >> t;
  while (t--) {
    int l, r, s; cin >> l >> r >> s;
    int stepR = 2 * (r - s);
    int stepL = 2 * (s - l) + 1;
    cout << min(stepR, stepL) << "\n";
  }

  return 0;
}