본문 바로가기

코딩

백준 1253 c++

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int arr[2000];

int main() {
    int num, result = 0, val;
    cin >> num;
    for (int i = 0; i < num; i++)
        cin >> arr[i];
    sort(arr, arr + num);

    for (int i = 0; i < num; i++) {
        val = arr[i];     // 찾고자 하는 번호
        int l = 0, r = num - 1, sum;
        while (l < r) {
            sum = arr[l] + arr[r];
            if (sum == val) {
                if (l != i && r != i) {
                    result++;
                    break;
                }
                else if (l == i)
                    l++;
                else if (r == i)
                    r--;
            }
            else if (sum < val)
                l++;
            else
                r--;
        }
    }
    cout << result;
    return 0;
}

 

 

주어진 배열(arr)에서 숫자를 입력 받고, 입력 받은 숫자를 오름차순으로 정렬합니다.
배열의 요소를 순회하면서 특정 숫자를 찾고자 합니다. 이를 위해 val 변수에 현재 순회 중인 숫자를 저장합니다.
이진 탐색을 사용하여 배열의 앞과 뒤에서부터 합을 계산합니다. 앞 인덱스(l)와 뒤 인덱스(r)를 초기화합니다.
합(sum)이 찾은 숫자(val)와 같으면, 해당 인덱스가 현재 순회 중인 인덱스(i)와 다른지 확인합니다.
다른 경우, 결과(result)를 증가시키고 반복문을 종료합니다.
같은 경우, l이 i와 같으면 l을 1 증가시키고, r이 i와 같으면 r을 1 감소시킵니다.
합이 찾은 숫자(val)보다 작으면 l을 1 증가시키고, 크면 r을 1 감소시킵니다.
반복문이 종료되면 결과(result)를 출력합니다.

'코딩' 카테고리의 다른 글

[유니티] Raycast 를 이용하여 총알을 발사하는 코드를 만들어보자  (0) 2023.12.20
백준 1377 c+  (0) 2023.07.14
백준 11725 c++  (0) 2023.07.09
백준 10828 c++  (0) 2023.07.07
백준 12605 c++  (0) 2023.07.05