100세까지 코딩
[do it 알고리즘] 백준 1940 (투 포인터2) 본문
문제 설명
풀기 전 생각
- 시간을 줄이기 위해 그전에 배운 BufferedReader 사용
- 입력 받은 것을 잘라서 배열에 저장후 오름차순 정리
- 투 포인터를 배열 처음(start_index)과 끝(end_index)에 두기
- (arr[start] + arr[end] < M)이면 start++, (arr[start] + arr[end] > M)이면 end--
- (arr[start] + arr[end] == M)이면 start++ 과 end-- 동시에 하고 cnt++
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Baek1940 {
public static void main(String[] args) throws Exception {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int M = Integer.parseInt(bf.readLine());
int[] arr = new int[N];
StringTokenizer st =new StringTokenizer(bf.readLine());
for(int i = 0; i < N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
int start_index = 0;
int end_index = N-1;
int cnt = 0;
while(arr[start_index] < arr[end_index]){
if(arr[start_index] + arr[end_index] < M){
start_index++;
}else if(arr[start_index] + arr[end_index] > M){
end_index--;
}else{
start_index++;
end_index--;
cnt++;
}
}
System.out.println(cnt);
}
}
참고
모범답안과 나의 풀이가 같으니 좋다
'코딩테스트 > 자바' 카테고리의 다른 글
[do it 알고리즘] 백준 1874 (스택) (0) | 2023.09.28 |
---|---|
[do it 알고리즘] 백준 12891 (슬라이딩 윈도우) (1) | 2023.09.25 |
[do it 알고리즘] 백준 2018 (투 포인터) (0) | 2023.09.24 |
[do it 알고리즘] 백준 11659 (구간 합 구하기) (0) | 2023.09.22 |
[do it 알고리즘] 백준 1546 (배열과 리스트) (0) | 2023.09.19 |