티스토리 뷰
728x90
문제 링크
https://www.acmicpc.net/problem/3649
3649번: 로봇 프로젝트
문제 상근이와 선영이는 학교 숙제로 로봇을 만들고 있다. 로봇을 만들던 중에 구멍을 막을 두 레고 조각이 필요하다는 것을 깨달았다. 구멍의 너비는 x 센티미터이고, 구멍에 넣을 두 조각의 길이의 합은 구멍의 너비와 정확하게 일치해야 한다. 정확하게 일치하지 않으면, 프로젝트 시연을 할 때 로봇은 부수어질 것이고 상근이와 선영이는 F를 받게 된다. 구멍은 항상 두 조각으로 막아야 한다. 지난밤, 상근이와 선영이는 물리 실험실에 들어가서 레고 조각의 크기를
www.acmicpc.net
두 블록 길이의 합이 정확히 구멍의 길이와 같은 블록을 찾는 문제입니다.
풀이
1) 구멍의 너비 x의 단위는 센티미터이므로, x에 10,000,000을 곱한다.
2) 레고 조각의 길이를 오름차순으로 정렬한다.
3) 앞에서부터 반복문을 돌리면서 lower_bound()로 적당한 값이 있는지 확인한다. 현재 보고 있는 길이를 p[i]라 하면 (*lower_bound(현재+1, 끝, x-p[i]) == x-p[i]) 인 경우가 답이다.
정답이 여러 개인 경우 $|l_1 - l_2|$가 가장 큰 것을 출력해야 합니다. 따라서 앞에서부터 보면서 정답을 찾자마자 출력하고 반복문을 탈출하면 됩니다.
정답 코드
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
|
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
ll x, p[1'001'000];
int n;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
while(cin>>x){
memset(p, 0, sizeof(p));
x *= 10'000'000;
cin>>n;
for(int i=0; i<n; i++){
cin>>p[i];
}
sort(p, p+n);
for(int i=0; i<n-1 ;i++){
ll c = *lower_bound(p+i+1, p+n, x-p[i]);
if(c == x-p[i]){
cout<<"yes " << p[i]<<' '<<c<<'\n';
goto pass;
}
}
cout<<"danger\n";
pass:;
}
}
|
cs |
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 1376 민식우선탐색 (2) | 2020.09.23 |
---|---|
[BOJ] 백준 1726 로봇 (0) | 2019.12.14 |
[BOJ] 백준 15971 두 로봇 (0) | 2019.10.15 |
[BOJ] 백준 17141 연구소2, 17142 연구소 3 (0) | 2019.10.15 |
[2019 숭고한 캠프] 백준 17392 우울한 방학 (1) | 2019.08.18 |
댓글