본문 바로가기

Problem Solving/BOJ 백준

[ BOJ 백준 3649번 - 로봇 프로젝트 ] 해설 및 코드

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

 

목적

구멍을 막을 수 있는 차이의 절대값이 가장 큰 조각 2개를 찾자.

 

접근법

1. 정렬 후 투포인터 알고리즘으로 양쪽 끝에서 조건을 만족하는 조각을 찾아나간다.

 

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
32
#include<iostream>
#include<algorithm>
#define f(i,l,r) for(int i=l;i<r;++i)
using namespace std;
 
bool solve(int x){
    int n;cin>>n;
    int a[(int)1e6];f(i,0,n)cin>>a[i];
    sort(a,a+n);
    int l=0,r=n-1;
    while(l<r){
        int sum=a[l]+a[r];
        if(sum==x){
            cout<<"yes "<<a[l]<<' '<<a[r]<<'\n';
            return true;
        }
        if(sum>x)--r;
        else ++l;
        
    }
    return false;
}
 
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int x;
    while(cin>>x){
        x*=1e7;
        if(!solve(x))cout<<"danger\n";
    }
}
 
 

 

 

문제 설명과 코드에 대한 피드백은 언제나 환영합니다.

 다양한 의견 댓글로 남겨주세요.