https://www.acmicpc.net/problem/3135
<코드>
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
int a,b;
int n;
cin>>a>>b>>n;
vector<int>v;
for(int i=0;i<n;i++)
{
int num;
cin>>num;
v.push_back(num);
}
sort(v.begin(),v.end());
vector<int>res;
for(int i=0;i<n;i++)
{
res.push_back(abs(v[i]-b));
}
sort(res.begin(),res.end());
if(res[0]>=abs(a-b))
{
cout<<abs(a-b)<<'\n';
}
else
{
cout<<1+res[0]<<'\n';
}
}
<풀이 과정>
우선적으로 시작점(a)와 끝점(b)를 이동해준다. 그리고 각 이동할 수 있는 위치(v[i]) - 끝점(b)의 절댓값을 구해줘야 한다(한 주파수 뒤로 가는 경우도 있지만, 한 주파수 앞으로 가는 경우도 있기 때문이다)
값을 구했다면, (시작점-끝점)의 절댓값이 이동할 수 있는 위치(v[i]) - 끝점(b)의 절댓값 중에서 가장 작은 값보다 작은지 큰지 비교해주면 끝이다.
'PS > 그리디 알고리즘[Greedy]' 카테고리의 다른 글
백준 1080 행렬(c++) (0) | 2023.01.31 |
---|---|
백준 1173 운동(c++) (1) | 2022.10.06 |
백준 20044 Project Teams(c++) (0) | 2022.09.18 |
백준 2170 선 긋기(c++) (0) | 2022.08.06 |
백준 1339 단어 수학(c++) (0) | 2022.07.22 |