250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 백준#BOJ#12865#평범한배낭
- 백준#boj#12755
- 백준#boj#16932#모양만들기
- 백준#BOJ#8012#한동이는영업사원
- 백준#BOJ#1939#중량제한
- 백준#BOJ#14501#퇴사#브루트포스
- 백준#BOJ#2615#오목
Archives
- Today
- Total
순간을 성실히, 화려함보단 꾸준함을
[boj : 15922] 아우으 우아으이야!! 본문
문제 : 수직선이 주어지고 [시작점,끝점] 이 주어진다. 선분은 겹칠 수 있고, 이때 그려지는 선분의 총 길이를 구해라
해설 : 간단히 생각해서 선분이 겹칠 경우만 잘 걸러주면 된다. 문제에서 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 |