[백준/BOJ] 2473 세 용액 - JAVA

2025. 7. 12. 20:58·알고리즘/문제풀이

[백준/BOJ] 2473 세 용액 - JAVA


문제

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

문제 분석

조건

-1,000,000,000 이상, 1,000,000,000 이하의 특성값을 갖는 N개의 용액이 있다. 이 중 3개의 다른 용액을 선택하여 각 용액의 특성값을 더했을 때 0과 가장 가까운 3개 용액을 구하는 문제이다.

풀이방법

우선 입력 받은 N개의 용액을 정렬한 뒤, 가장 낮은 특성값을 가진 용액을 고정시킨 뒤 탐색을 하는 방식으로 구현하였다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static long[] answer = {0, 0, 0};
    static long sum = 3000000000L;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int N = Integer.parseInt(br.readLine());
        long[] arr = new long[N];
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            arr[i] = Long.parseLong(st.nextToken());
        }
        Arrays.sort(arr);

        for (int i = 0; i < N - 2 && sum != 0; i++) {
            solution(arr, i);
        }
        System.out.println(answer[0] + " " + answer[1] + " " + answer[2]);
    }

    private static void solution(long[] arr, int left) {
        int mid = left + 1;
        int right = arr.length - 1;
        while (mid < right) {
            long temp = arr[left] + arr[mid] + arr[right];
            if (temp == 0) {
                sum = 0;
                answer[0] = arr[left];
                answer[1] = arr[mid];
                answer[2] = arr[right];
                return;
            }
            if (Math.abs(temp) < sum) {
                answer[0] = arr[left];
                answer[1] = arr[mid];
                answer[2] = arr[right];
                sum = Math.abs(temp);
            }
            if (temp < 0) {
                mid++;
            } else {
                right--;
            }
        }
    }
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)
'알고리즘/문제풀이' 카테고리의 다른 글
  • [프로그래머스] 12942 최적의 행렬 곱셈 - JAVA
  • [프로그래머스] 62050 지형 이동 - JAVA
  • [백준/BOJ] 21610 마법사 상어와 비바라기 - JAVA
  • [프로그래머스] 84021 퍼즐 조각 채우기 - JAVA
LIRI
LIRI
  • LIRI
    기록
    LIRI
  • 전체
    오늘
    어제
    • 분류 전체보기 (74)
      • 블로그 꾸미기 (0)
      • Spring (6)
      • 바이브코딩 (1)
      • React (3)
      • CS (0)
      • 알고리즘 (57)
        • 개념 (2)
        • 문제풀이 (54)
      • Java (1)
      • DB (1)
      • log (4)
        • SSAFY (3)
        • 궁금 (1)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    백준
    느좋코딩
    LV2
    LIS
    바이브코딩
    BOJ
    비트마스킹
    Security
    그리디
    BFS
    JWT
    리액트
    ssafy 합격 후기
    알고리즘 문제풀이
    최장증가부분수열
    SSAFY 9기
    dp
    싸피
    프로그래머스
    SSAFY
    알고리즘
    dfs
    pccp모의고사
    lv3
    Spring
    springboot
    너비우선탐색
    Springsecurity
    Java
    커서ai
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
LIRI
[백준/BOJ] 2473 세 용액 - JAVA
상단으로

티스토리툴바