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();
}
}
'알고리즘' 카테고리의 다른 글
[JavaScript] 프로그래머스 - 신고 결과 받기 (0) | 2023.02.19 |
---|---|
[JavaScript] 프로그래머스 - 파괴되지 않은 건물 (0) | 2023.02.18 |
[Java] 백준 9661번 돌 게임 7 (0) | 2023.02.17 |
[Java] 백준 9660번 돌 게임 6 (0) | 2023.02.17 |
[Java] 백준 9659번 돌 게임 5 (0) | 2023.02.17 |