BOJ 2470 두 용액

2020. 10. 11. 04:01·알고리즘/BOJ

www.acmicpc.net/problem/2470

 

2470번: 두 용액

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

www.acmicpc.net

 

양수인 산성 용액과 음수인 알칼리성 용액이 주어지면 0과 가장 가까운 값의 두 구간을 찾는 문제다.

 

  • 투 포인터를 활용하기 위해서 배열을 정렬해준다
  • 왼쪽 포인터와 오른쪽 포인터 S = 0, E = n - 1로 설정해준다
  • vector에 <절댓값, 구간 2개> 로 입력받고
  • 두 구간의 합이 양수면 오른쪽을 줄이고
  • 음수면 왼쪽을 줄인다
  • 두 포인터가 서로 교차하면 종료
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int ar[100001], n, s, e;
vector<pair<int, pair<int, int>>> ans; 

int main() {
	ios::sync_with_stdio(false); cin.tie(0);

	cin >> n;
	for (int i = 0; i < n; i++) cin >> ar[i];
	sort(ar, ar + n);

	s = 0, e = n - 1; 
	while (s < e) { 
		ans.push_back({ abs(ar[s] + ar[e]),{ar[s],ar[e]} });
		if (ar[s] + ar[e] > 0) e--;
		else s++;
	}
	sort(ans.begin(), ans.end()); 

	cout << ans[0].second.first << ' ' << ans[0].second.second << endl;

	return 0;
}

 

처음엔 s<=e 로 설정해서 계속 틀렸다.

이분 탐색류는 경곗값 범위 설정을 조심히 다뤄야 하는 걸 다시 느낀다.

'알고리즘 > BOJ' 카테고리의 다른 글

BOJ 4195 친구 네트워크  (0) 2020.10.17
BOJ 1976 여행 가자  (0) 2020.10.15
BOJ 7795 먹을 것인가 먹힐 것인가  (0) 2020.10.11
BOJ 1806 부분합  (0) 2020.10.10
BOJ 13414 수강 신청  (0) 2020.10.07
'알고리즘/BOJ' 카테고리의 다른 글
  • BOJ 4195 친구 네트워크
  • BOJ 1976 여행 가자
  • BOJ 7795 먹을 것인가 먹힐 것인가
  • BOJ 1806 부분합
khyu2
khyu2
  • khyu2
    dev log
    khyu2
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 알고리즘
        • BOJ
        • Programmers
        • Algorithm
        • SWEA
      • 개발
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    완전탐색
    dp
    이분 탐색
    완전 탐색
    소수
    BOJ
    MST
    피사노 주기
    GREEDY
    큐
    냅색
    dfs
    유니온 파인드
    팰린드롬
    피보나치 수
    우선순위 큐
    행렬 제곱
    트리
    알고리즘
    이분탐색
    SWEA
    분할 정복
    크루스칼
    코딩테스트 연습
    프로그래머스
    조합
    다익스트라
    BFS
    시뮬레이션
    구현
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
khyu2
BOJ 2470 두 용액
상단으로

티스토리툴바