Junior-Developer
Home
  • Category (316)
    • 문제풀이 (270)
      • 백준oj (201)
      • 프로그래머스 (53)
      • 명품 자바 프로그래밍(개정4판) (11)
      • 구름 (5)
    • 알고리즘 (6)
    • Node.js (2)
    • 체크리스트 (37)
블로그 내 검색
Home

Junior-Developer

1일 1커밋! 1일 1 백준!

  • 문제풀이/백준oj

    [백준OJ] 2473번 세 용액

    2021. 3. 9.

    by. Hyeon-Uk

    반응형

    www.acmicpc.net/problem/2473

     

    2473번: 세 용액

    첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상

    www.acmicpc.net


     

    풀이)

    khu98.tistory.com/57 용액의 문제와 유사한데 한개가 추가되었다.

    용액이 한개가 추가되었는데

    1)첫번째 용액을 0번으로 고정시켜둔뒤, 1~N-1번 용액까지 투포인터를 이용해서 첫번째 용액이 0번 인덱스의 용액일때의 합의 최솟값을 구해준다.

    2)그다음 1번 용액으로 고정시켜둔뒤, 2~N-1번 용액까지 투포인터를 이용해서 첫번째 용액이 1번 용액일 때의 합의 최솟값을 구해준다.

    3)고정되는 인덱스를 N-3번 용액까지 늘려가며( 왜냐면 3개의 용액이 필요하니까 마지막은 N-3,N-2,N-1 용액이 될 수 있도록 해주기 위해) ABS(세 용액의 합) 의 최솟값을 구해주면 된다.

     

    시간 복잡도)

    입력에 오름차순으로 받는다는 가정이 없으니, 처음 정렬을 할때 퀵소트로 O(NlogN)이 걸리고,

    연산과정에서 N-2개의 용액에 대해 투포인터를 실행시키므로 O(N*N)이 된다.

    결과적으로 O(N*N)이 된다.

     

    코드)

    #include<iostream>
    #include<algorithm>
    #include<vector>
    using namespace std;
    
    vector<long long> liq;
    
    int main(){
        int n;
        cin>>n;
        
        for(int i=0;i<n;i++){
            int data;
            cin>>data;
            liq.push_back(data);
        }
        
        //정렬시켜줘야됨
        sort(liq.begin(),liq.end());
    
        int left,right;
        long long mini=3000000001;//세 용액의 합의 최댓값 30억
        pair<long long,pair<long long,long long>> result;
        
        for(int i=0;i<n-2;i++){
            left=i+1;
            right=n-1;
    
            while(left<right){
                long long sum=liq[left]+liq[right]+liq[i];
                if(mini>abs(sum)){
                    mini=abs(sum);
                    result.first=liq[i];
                    result.second.first=liq[left];
                    result.second.second=liq[right];
                }
                if(sum>0){
                    right--;
                }
                else{
                    left++;
                }
            }
        }
        cout<<result.first<<" "<<result.second.first<<" "<<result.second.second;
    }
    
    반응형
    저작자표시 (새창열림)

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

    [백준OJ] 7562번 나이트의 이동  (0) 2021.03.11
    [백준OJ] 18427번 함께 블록 쌓기  (0) 2021.03.11
    [백준OJ] 2467번 용액  (0) 2021.03.09
    [백준OJ] 1715번 카드 정렬하기  (0) 2021.03.09
    [백준oj] 1049번 기타줄  (0) 2021.03.07

    댓글

    관련글

    • [백준OJ] 7562번 나이트의 이동 2021.03.11
    • [백준OJ] 18427번 함께 블록 쌓기 2021.03.11
    • [백준OJ] 2467번 용액 2021.03.09
    • [백준OJ] 1715번 카드 정렬하기 2021.03.09
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

Today

Total

Powered by ⓒ Kakao Corp.

Designed by Nana
블로그 이미지
Hyeon-Uk

티스토리툴바