현재 알고리즘 공부를 하고있는데 계속 시간초과가 나서 Scanner를 못쓰게 됐다...
앞으로 많은 문제들이 이러한 제약을 갖고있을 듯 하여 이제서야 공부하게 됐다.
1920번 수 찾기 자바로 풀어 본 짧은 글
1920번 수 찾기 1920번: 수 찾기 (acmicpc.net) 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주
spody.tistory.com
정렬과 이분탐색 모두 사용하는데 시간도 얼마 없는 문제.... 여기서 막혀버렸다
때문에 공부 조금 하고 정리할 겸 올리는 글....
사전준비
1 2 3 4 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; | cs |
1 | public static void main(String[] args) throws NumberFormatException, IOException{ | cs |
main에는 이렇게 IOExcption을 해줘야한다.
BufferedReader는 Scanner에 비해서 속도가 훨씬 빠르다.
이유는 입력된 데이터가 버퍼를 거쳐 전달돼서 데이터 처리 효율이 올라간다.
때문에 데이터가 많이 들어갈 때는 이 클래스를 활용해서 해결해야한다.
또 StringTokenizer를 사용하는 이유는 BufferedReader는 한 줄씩 입력을 받는 readLine을 사용하게 되는데
"10 5 3 1 10" 등 값을 띄어쓰기로 구분 해 입력받는다 이러한 한 줄을 처리하기 위해 String을 token간격으로 끊어 사용한다는 의미의
StringTokenizer를 사용해 해당 값을 처리해준다.
기본적으로 StringTokenizer을 사용하면 띄어쓰기 별로 10 5 3 1 10 이 값에서 nextToken()메소드를 사용할 때마다
순차적으로 꺼낸다.
ex)
1 2 3 4 5 6 7 8 9 10 11 | import java.io.BufferedReader; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); int[] a = new int[n]; StringTokenizer st = new StringTokenizer(br.readLine()); for(int i = 0; i < n; i++) { a[i] = Integer.parseInt(st.nextToken()); } | cs |
input : 5
10 5 3 1 10
이 경우
a[0] = token(10)
a[1] = token(5)
a[2] = token(3)
a[3] = token(1)
a[4] = token(10)
이런 식이다.
형태를 잘 기억해두자.
'공부 > Java' 카테고리의 다른 글
자바의 native 키워드 (1) | 2025.01.28 |
---|---|
자바 프로젝트를 실행할 때(배포) (0) | 2024.08.18 |
우테코 프리코스 6기 1주차 숫자야구 회고 (0) | 2023.10.26 |
자바의정석 ch14 람다와 스트림 (0) | 2023.09.18 |
nextInt()입력 후 nextLine()사용 시 주의점 (0) | 2022.12.18 |