끄적끄적 코딩
article thumbnail
728x90

9개의 값이 주어졌을 때 합이 100이 되는 7개를 찾는 문제입니다.

투포인터를 사용해서 문제를 해결하였습니다.
9개의 총합 - 100 = 나머지 2개

ex) 130(총합) - 100 = 30

투포인터를 사용해서 30 (나머지 2개)를 찾습니다.

while(true) {
    if(arr[left] + arr[right] == findNum) {
        break;
    }
    if(findNum > arr[left] + arr[right]) {
        ++left; 
    } else {
        --right;
    }
}

먼저 오름차순으로 정렬해줍니다.
각 끝점부터 해당 위치의 인덱스를 left, right에 넣어줍니다.

두 값의 합이 찾는 값보다 작으면 right를 한칸 왼쪽으로 이동
두 값의 합이 찾는 값보다 크면 left를 한칸 오른쪽으로 이동합니다.

찾는 값이 나온 경우 반복문에서 벗어나서 left, right 위치만 빼고 결과값을 출력해주었습니다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int ans = 0;
		int sum = 0;
		int[] man = new int[9];
		int[] arr = new int[9];
		for(int i=0; i<9; ++i) {
			arr[i] = Integer.parseInt(br.readLine());
			man[i] = arr[i];
			sum += arr[i];
		}
		Arrays.sort(arr);
		int findNum = sum - 100;
		int left = 0;
		int right = 8;
		while(true) {
			if(arr[left] + arr[right] == findNum) {
				break;
			}
			if(findNum > arr[left] + arr[right]) {
				++left; 
			} else {
				--right;
			}
		}
		
		for(int i=0; i<9; ++i) {
			if(man[i] == arr[left] || man[i] == arr[right]) {
				continue;
			}
			bw.write(man[i] + "\n");
		}
				
		bw.close();
	}
}

검색 태그