[백준] 실버3 두 수의 합 JAVA
2025. 3. 27. 16:31ㆍ코테공부/문제풀이
문제
투 포인터의 기본 문제이다.
풀이 방법
- 풀이 시간 : 5분
투 포인터를 이용해 양쪽에서 탐색 시작해 진행하면 된다.
arr = [1, 2, 3, 5, 7, 9, 10, 11, 12]
↑ ↑
left right
1 + 12 = 13 → 정답! → result++ -> right--
위와 같이 target을 찾으면 right--를 해주어야한다. 어차피 정렬되어있기 때문에 다음 정답을 찾기위해선 left나 right의 인덱스 위치를 바꿔주어야한다.
추가적으로 arr[left] + arr[right] < target 이면 더 큰값을 더해주어야 하기때문에 left++, 반대라면 더 작은 값을 더해주어야 하기때문에 right--를 진행한다.
코드(JAVA)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
int left = 0;
int right = N-1;
int target = Integer.parseInt(br.readLine());
Arrays.sort(arr);
int count = 0;
while(true){
if(left >= right){
break;
}
if(arr[left] + arr[right] == target){
count++;
right--;
}else if(arr[left] + arr[right] < target){
left++;
}else if(arr[left] + arr[right] > target){
right--;
}
}
System.out.println(count);
}
}
결과
'코테공부 > 문제풀이' 카테고리의 다른 글
[코드트리] 보도블럭 (0) | 2025.04.02 |
---|