-
백준 3649 로봇 프로젝트 - C++, 두 포인터, 예외 찾기쾌락없는 책임 (공부)/알고리즘 문제풀이 2021. 6. 26. 16:25반응형
#include <iostream> #include <algorithm> using namespace std; // 1cm = 10000000 um // 구멍의 너비, 레고 조각수, 레고 조각의 길이 int x, n, l; int lego[1000001]; int main(){ ios::sync_with_stdio(false); cin.tie(); cout.tie(); while(cin >> x >> n){ // input for(int i = 0; i < n; i++) cin >> lego[i]; sort(lego, lego + n); x *= 10000000; int left = 0; int right = n - 1; int temp; while(left < right){ temp = lego[left] + lego[right]; if(temp > x) right--; else if(temp < x) left++; else break; } if(n < 2) cout << "danger\n"; else if(temp == x) cout << "yes" << " " << lego[left] << " " << lego[right] << '\n'; else cout << "danger\n"; } }
처음 문제를 봤을때 골드 4에 15% 정답률 이라는것에서 놀랐고 예시 케이스가 1개인 점에서 조금 헷갈렸다. 아무튼 이 문제를 풀어보니 정답률이 낮은건 아래 2가지 때문인 것 같다.
1. while문 안에 input 구문을 넣어야 한다
2. 레고 블럭 수가 2개 이하인 경우를 생각해야 한다.
저는 1번은 잘 캐치했지만 2번의 경우 나중에 시험삼아 1, 1, 1을 입력해보니 'yes 1 1'이렇게 뜨길레 아차 싶어서 if문을 추가 했습니다. n < 2인 경우는 탐색도 금방 끝나니 아래 if 를 넣어두는게 시간적으로 큰 손해는 아닌 듯 합니다
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
백준 1717 집합의 표현 - C++, Union find (0) 2021.06.29 백준 2660 회장뽑기 - C++, 플로이드-와샬 (0) 2021.06.26 백준 14442 벽 부수고 이동하기 2 - C++, BFS (0) 2021.06.24 백준 2473 세 용액 - C++, 두 포인터 (0) 2021.06.24 백준 2206 벽 부수고 이동하기 - C++, BFS (0) 2021.06.23