2459 : 철사 자르기

풀이

문제를 끝까지 안 읽어서 직선의 위치를 직접 정해야 하는 줄 알았는데

알고보니 직선의 위치를 문제에서 주는 거였다.

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, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2017-08-20 00:38

Read more posts by this author