풀이
문제를 끝까지 안 읽어서 직선의 위치를 직접 정해야 하는 줄 알았는데
알고보니 직선의 위치를 문제에서 주는 거였다.
i번째 점과 i+1번째 점의 좌표를 이용해서 어찌저찌 잘 짜면 된다.
코드
#include <bits/stdc++.h>
#define fst first
#define snd second
using namespace std;
int n, k, l;
pair<int, int> p[100002];
int main() {
scanf("%d %d", &n, &k);
for (int i = 0; i < k; i++) scanf("%d %d", &p[i].fst, &p[i].snd);
p[k++] = { 1,1 };
scanf("%d", &l);
int x = 1, y = 1, acc = 0;
vector<int> tmp;
for (int i = 0; i < k; i++) {
int nx = p[i].fst, ny = p[i].snd;
if (nx <= l && l < x)
tmp.push_back(acc + abs(l - x) - 1), acc = abs(l - nx);
else if (x <= l && l < nx)
tmp.push_back(acc + abs(l - x) + 1), acc = abs(l - nx);
else
acc += abs(nx - x) + abs(ny - y);
x = nx, y = ny;
}
tmp[0] += acc;
int ans = 0;
for (int now : tmp) ans = max(ans, now);
printf("%d", ans);
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이