순간을 성실히, 화려함보단 꾸준함을

[boj : 15922] 아우으 우아으이야!! 본문

알고리즘,SQL/백준,BOJ

[boj : 15922] 아우으 우아으이야!!

폭발토끼 2020. 12. 24. 12:05

www.acmicpc.net/problem/15922

 

15922번: 아우으 우아으이야!!

N개의 선분을 모두 그렸을 때, 수직선 위에 그어진 선분 길이의 총합을 출력한다아아어으잉에애야우아으아이아야아아아아아아이야!!!

www.acmicpc.net

문제 : 수직선이 주어지고 [시작점,끝점] 이 주어진다. 선분은 겹칠 수 있고, 이때 그려지는 선분의 총 길이를 구해라

 

해설 : 간단히 생각해서 선분이 겹칠 경우만 잘 걸러주면 된다. 문제에서 x 값이 증가되는 순서대로 주어진다고 했으니 선분이 서로 겹치는 경우는 단 하나 밖에 없다.

 

후에 들어오는 x 좌표가 기존에 존재하는 좌표의 y 값보다 작거나 같을때

 

[x1] ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ [y1]

 

                                                             [x2] ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ[y2]

                                                              

 

이런 경우가 대표적인 예라고 할 수 있겠다.

결국 max(y1,x2)==y1 이라면 선분은 겹치게 된다. 그리고 선분을 다시 갱신해 주면 되는 것이다. y1을 y2로(더 정확히는 max(y1,y2) 로)

 

이를 코드로 구현만 하면 된다.

 

#include<bits/stdc++.h>

using namespace std;

int main()
{
	int n;
	cin >> n;

	int ans = 0;
	int x1, y1, x2, y2;
	cin >> x1 >> y1;
	for (int i = 1; i < n; i++) {
		cin >> x2 >> y2;
		if (max(y1, x2) == y1)
			y1 = max(y1,y2);
		else {
			ans += abs(x1 - y1);
			x1 = x2;
			y1 = y2;
		}
	}
	cout << ans+abs(x1-y1);
	return 0;
}

'알고리즘,SQL > 백준,BOJ' 카테고리의 다른 글

[boj : 15971] 두 로봇  (0) 2021.01.02
[boj : 16569] 화산쇄설류  (0) 2021.01.02
[boj : 15886] 내 선물을 받아줘2  (0) 2020.12.24
[boj : 11565] 바이너리 게임  (0) 2020.12.23
[boj : 12904] A와 B  (0) 2020.12.23