PS/그리디 알고리즘[Greedy]

백준 3135 라디오(c++)

SeungbeomKim 2022. 9. 18. 17:57
반응형

https://www.acmicpc.net/problem/3135

 

3135번: 라디오

첫 줄엔 정수 A와 B가 주어진다 (1 ≤ A, B < 1000, A ≠ B). 다음 줄엔 정수 N이 주어진다 (1 ≤ N ≤ 5). 다음 N개의 줄엔 미리 지정되어 있는 주파수가 주어진다 (주파수는 1000 보다 작다).

www.acmicpc.net

<코드>

#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