danbibibi
article thumbnail
Published 2022. 12. 23. 19:03
BOJ 1253번: 좋다 문제 풀이/백준

문제

문제 바로가기> BOJ 1253번: 좋다

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

 

풀이

정렬 후 두 포인터를 이용하여 "좋은" 수를 찾을 수 있다.

* 서로 다른 두 수의 합은 해당 수를 사용해서 만들어지면 안된다!

 

#include<iostream>
#include<algorithm>
#define MAX 2001
using namespace std;

int N;
int num[MAX];

void input(){
    cin >> N;
    for(int i=0; i<N; i++) cin >> num[i];
}

void solution(){
    sort(num, num+N); // 정렬
    
    int ans = 0;
    for(int i=0; i<N; i++){
        int val = num[i];
        int l=0, r=N-1, sum;
        while(l < r){
            sum = num[l]+num[r];
            if(sum == val){
                if(l!=i && r!=i){
                    ans++;
                    break;
                }
                else if(l==i) l++;
                else if(r==i) r--;
            }
            else if(sum < val) l++;
            else r--;
        }
    }
    cout << ans;
}

int main(){
    ios_base::sync_with_stdio(0); cin.tie(0);
    input();
    solution();
}

'문제 풀이 > 백준' 카테고리의 다른 글

BOJ 5014번: 스타트링크  (1) 2022.12.28
BOJ 1806번: 부분합  (0) 2022.12.23
BOJ 2887번: 행성 터널  (1) 2022.12.22
BOJ 5430번: AC  (0) 2022.12.20
BOJ 13549번: 숨바꼭질 3  (0) 2022.12.14
profile

danbibibi

@danbibibi

꿈을 꾸는 시간은 멈춰 있는 것이 아냐 두려워하지 마 멈추지 마 푸른 꿈속으로