언어를 바꾸는데 문제가 많다.
이번에는 입력에서 문제가 생겼는데, 지난 번 공부했던 BufferReader를 사용할 때 문제가 발생했다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
Scanner sc = new Scanner(System.in);
이렇게 첫 줄 두 정수는 스캐너를 이용하고, 밑에 줄에 여러 정수를 입력 받을 때(최대 100개의 정수)는 버퍼 리더를 사용하려고 했었다.
하지만 스캐너에서 버퍼로 넘어가버린 줄바꿈문자 \n
이 버퍼에 입력되어 버려서 에러를 출력하는 문제가 발생했다.
버퍼에 익숙해졌다고 생각했는데, 버퍼와 스캐너를 동시에 사용하는 것은 문제가 있어서 버퍼만 사용해서 이 문제를 풀기로 했다.
import java.util.StringTokenizer;
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
문제는 버퍼를 입력 받을 때, 정수라면 parseInt를 이용해서 정수로 변환해줘야하는데 변수 하나에 입력받는 변수 하나를 입력해줘야 하기 때문에 Split을 해줘야 했다.
이를 위한 라이브러리는 StringTokenizer 인데, 말 그대로 String을 토큰화 한다는 뜻이다.
" "
을 기준으로 각 문자열을 토큰화해서 parseInt가 가능하게 해주는 라이브러리이다.
이것도 파이썬으로 하면 매우 편하게 가능하다.
n, m = map(int, input().split())
문제는 여기서 끝이 아니었다.
바로 버퍼로 입력받은 수들을 배열에 저장해야 했다는 것
import java.util.stream.Collectors;
import java.util.Arrays;
List<Integer> numbers = Arrays.stream(br.readLine().split(" "))
.map(c -> Integer.valueOf(c))
.collect(Collectors.toList());
진짜 어렵다... 심지어 배열이 아니라 List에 저장되기 때문에, Value를 조회하려면 numbers.get(i)
로 조회를 해야했다.
이제 슬슬 자바의 문법들이 익숙해지나 싶었는데, 한발짝 멀어진 느낌이다.
완전탐색하는 쉬운 문제이기 때문에, 역시 자바의 문법만 해결된다면 쉽게 풀 수 있는 문제였다.
코드전문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int answer = 0;
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
List<Integer> numbers = Arrays.stream(br.readLine().split(" "))
.map(c -> Integer.valueOf(c))
.collect(Collectors.toList());
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1 ; k < n; k++) {
int temp = numbers.get(i) + numbers.get(j) + numbers.get(k);
if (temp <= m && temp > answer) {
answer = temp;
}
}
}
}
System.out.println(answer);
}
}