반응형
https://www.acmicpc.net/problem/20366
two pointer로 해결한 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
눈사람 수 n, 정답을 출력할 변수 ans, 눈덩이의 지름을 저장할 일차원 배열 snow를 선언한 후 적절히 입력받습니다.
📔 풀이과정
i ~ j까지의 눈사람이 다음과 같이 있을 때 i, j지름의 눈덩이로 눈사람을 만들고 i+1, j-1지름의 눈덩이로 다른 눈사람을 만든다고 볼 수 있습니다. 2중 for loop를 수행하며 i, j를 고정시키고 정답은 최솟값이며 이는 i, j사이에 존재하므로 모든 눈덩이를 탐색할 필요 없습니다. twopointer로 적절히 pruning하여 정답을 구합니다.
i | i+1 | j-1 | j |
📔 정답출력
ans를 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int n, ans = 0x3f3f3f3f;
int snow[601];
int main(){
cin >> n;
for(int i = 0; i < n; i++) cin >> snow[i];
sort(snow, snow + n);
for(int i = 0; i < n; i++){
for(int j = i+3; j < n; j++){
int one = snow[i] + snow[j];
int l = i + 1;
int r = j - 1;
while(l <= r){
int two = snow[l] + snow[r];
ans = min(ans, abs(one - two));
if(one - two <= 0) r--;
else l++;
}
}
}
cout << ans;
}
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Sweeping' 카테고리의 다른 글
(Python3) - 프로그래머스(코딩테스트 입문) : 겹치는 선분의 길이 (1) | 2024.11.03 |
---|---|
(C++) - LeetCode (easy) 643. Maximum Average Subarray I (0) | 2023.05.31 |
(C++) - 백준(BOJ) 15565번 : 귀여운 라이언 (0) | 2021.08.22 |
(C++) - 백준(BOJ) 2018번 : 수들의 합 5 (0) | 2021.08.19 |
(C++) - 백준(BOJ) 1689번 : 겹치는 선분 (0) | 2021.08.11 |