[백준 32626] SPC에 가는 길 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
집에서 대회장까지 축과 평행하게 이동할 때 필요한 최소 방향 전환 횟수를 구하는 문제입니다.
접근법
출발점과 도착점의 x좌표와 y좌표가 모두 다르면, 한 번 꺾어서 갈 수 있으므로 답은 1입니다.
같은 x축 위에 있을 때는 장애물이 경로 위에 있는지 확인합니다. 장애물의 x좌표가 다르거나 경로 범위 밖이면 0, 경로 위에 있으면 2입니다.
같은 y축 위에 있을 때도 마찬가지로 장애물이 경로 위에 있으면 2, 아니면 0입니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
class Program {
static void Main() {
var parts = Console.In.ReadToEnd().Split();
var idx = 0;
var sx = long.Parse(parts[idx++]);
var sy = long.Parse(parts[idx++]);
var ex = long.Parse(parts[idx++]);
var ey = long.Parse(parts[idx++]);
var px = long.Parse(parts[idx++]);
var py = long.Parse(parts[idx++]);
if (sx != ex && sy != ey) Console.WriteLine(1);
else if (sx == ex) {
if (px != sx) Console.WriteLine(0);
else if ((sy <= py && py <= ey) || (sy >= py && py >= ey)) Console.WriteLine(2);
else Console.WriteLine(0);
} else if (sy == ey) {
if (py != sy) Console.WriteLine(0);
else if ((sx <= px && px <= ex) || (sx >= px && px >= ex)) Console.WriteLine(2);
else Console.WriteLine(0);
}
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ll sx, sy, ex, ey, px, py; cin >> sx >> sy >> ex >> ey >> px >> py;
if (sx != ex && sy != ey) cout << 1 << "\n";
else if (sx == ex) {
if (px != sx) cout << 0 << "\n";
else if ((sy <= py && py <= ey) || (sy >= py && py >= ey)) cout << 2 << "\n";
else cout << 0 << "\n";
} else if (sy == ey) {
if (py != sy) cout << 0 << "\n";
else if ((sx <= px && px <= ex) || (sx >= px && px >= ex)) cout << 2 << "\n";
else cout << 0 << "\n";
}
return 0;
}