[BOJ] 11970. Fence Painting
Fence Painting
알고리즘 구분 : 수학, 구현
문제
Several seasons of hot summers and cold winters have taken their toll on Farmer John's fence, and he decides it is time to repaint it, along with the help of his favorite cow, Bessie. Unfortunately, while Bessie is actually remarkably proficient at painting, she is not as good at understanding Farmer John's instructions.
If we regard the fence as a one-dimensional number line, Farmer John paints the interval between (x=a) and (x=b). For example, if (a=3) and (b=5), then Farmer John paints an interval of length 2. Bessie, misunderstanding Farmer John's instructions, paints the interval from (x=c) to (x=d), which may possibly overlap with part or all of Farmer John's interval. Please determine the total length of fence that is now covered with paint.
입력
The first line of the input contains the integers (a) and (b), separated by a space ((a < b)).
The second line contains integers (c) and (d), separated by a space ((c < d)).
The values of (a), (b), (c), and (d) all lie in the range (0 \ldots 100), inclusive.
출력
Please output a single line containing the total length of the fence covered with paint.
예제 입력 1
7 10
4 8
예제 출력 1
6
문제 풀이
문제를 해석할 때, 조금 애매한 부분이 있지만, 결론적으로는 Bessie가 칠하게 된 울타리 범위를 구하라는 것이 핵심이다.
John이 지시한 내용을 제대로 이해하지 못하고 C~D구간을 칠했지만, 나중에 A~B구간을 다시 칠하게 되므로 A~B, C~D 구간에서 겹치는 부분을 제외한 총 칠한 울타리 칸 수를 구하면 되는 문제이다.
겹치는 부분을 조건문으로 구분하여 일일이 구현하여 풀었다. 조건을 나누는 것만 해낸다면 바로 풀 수 있는 문제다
소스 코드
#include <bits/stdc++.h>
using namespace std;
vector<int> j;
vector<int> b;
void solve();
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
for(int i = 0; i < 2; i++) {
int input;
cin >> input;
j.push_back(input);
}
for(int i = 0; i < 2; i++) {
int input;
cin >> input;
b.push_back(input);
}
solve();
return 0;
}
void solve() {
int result;
if(j[0] < b[0]) {
if(j[1] < b[0]) {
result = (j[1] - j[0]) + (b[1] - b[0]);
}
else if(j[1] >= b[0]) {
if(j[1] <= b[1]) {
result = b[1] - j[0];
}
else if(j[1] > b[1]) {
result = j[1] - j[0];
}
}
}
else if(j[0] > b[0]) {
if(j[0] > b[1]) {
result = (j[1] - j[0]) + (b[1] - b[0]);
}
else if(j[0] <= b[1]) {
if(j[1] >= b[1]) {
result = j[1] - b[0];
}
else if(j[1] < b[1]) {
result = b[1] - b[0];
}
}
}
else {
if(j[1] == b[1]) {
result = j[1] - j[0];
}
else if(j[1] > b[1]) {
result = j[1] - j[0];
}
else if(j[1] < b[1]) {
result = b[1] - b[0];
}
}
cout << result << endl;
}
- 문제 출처 : https://www.acmicpc.net/problem/11970
- 해당 풀이는 백준에서 "맞았습니다!!" 판정을 받았습니다.
Author And Source
이 문제에 관하여([BOJ] 11970. Fence Painting), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dl-00-e8/BOJ-11970.-Fence-Painting저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)