티스토리 뷰

반응형

https://www.acmicpc.net/problem/2467

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 이분 탐색
  • 두 포인터

 


 

⊙ 문제 접근 과정

 

반복문을 2중 이상으로 사용하면 시간 초과가 뜬다.

하나만을 이용해 풀어야한다. 그 방법 중 하나로 투 포인터 알고리즘이 있다.

 

투 포인터

  1. start, end -> index값 생성
  2. index를 이용해 절댓값을 사용해준다.
  3. 반복

 


 

⊙ 문제 풀이

 

#include <iostream>
#include <vector>
#include <algorithm>

typedef long long ll;
using namespace std;

ll n;

int main() {
    cin >> n;

    ll arr[n+1];

    for(int i=0;i<n;i++) {
        cin >> arr[i];
    }

    ll result = 99999999999;

    ll start=0, end=n-1;
    ll one,two;

    while (start <end) {
        ll temp = arr[start] + arr[end];
        ll num = abs(temp);
        if(result>num) {
            result = num;
            one = arr[start];
            two = arr[end];
        }
        if(temp>0)
            end--;
        else start++;
    }

    cout << one << " " << two;

}

⊙ 결과

 


 

 

⊙ 마무리

 

 

NONE

 

좋아요는 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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 30
글 보관함