코딩테스트/자바
[do it 알고리즘] 백준 1940 (투 포인터2)
100세까지 코딩
2023. 9. 24. 23:56
문제 설명
풀기 전 생각
- 시간을 줄이기 위해 그전에 배운 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);
}
}
참고
[자바 공부] StringTokenizer
StringTokenizer 문자열을 우리가 지정한 구분자로 문자열을 쪼개주는 클래스 주요 메서드 countTokens() 현재 남아있는 token 개수 hasMoreTokens() 남아있는 토큰이 있으면 true, 없으면 false nextToken() 객체에
sjd0219.tistory.com
[자바 공부] BufferedReader vs Scanner
한눈에 정리 BufferedReader Scanner 버퍼 사이즈(byte) 8192 1024 데이터 파싱 String으로 단순히 읽음 원하는 타입으로 파싱 예외 처리 IOException 던짐 IOException 숨김 Syncronized O X 속도 빠름 느림 1) Scanner 공백
sjd0219.tistory.com
모범답안과 나의 풀이가 같으니 좋다