백준온라인에서 문제를 풀려면 모든 문제가 입력 값을 받는 부분을 작성해야 한다.
방법은 많지만 속도 때문에 Scanner 는 권장하지 않는다고 했고, BufferedReader 를 이용한다.
샘플 입력은 이런식이다.
5 6 1 5 1 1 1 2 2 1 3 3 2 3 4 2 4 5 3 4 6 |
어떤 숫자이고 무슨 의미인지는 문제에서 주어진다.
숫자를 하나하나 입력받는 샘플 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Day1A {
public static void main(String[] args) throws Exception{
// 입력 값 셋팅
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int V, E; // 정점의 수, 간선의 수
int K; // 시작 정점
V = Integer.parseInt(st.nextToken());
E = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
K = Integer.parseInt(st.nextToken());
ArrayList<int[]>[] G = new ArrayList[V+1]; // 그래프 생성
for (int i=1 ; i <=V ; i++) {
G[i] = new ArrayList<int[]>();
}
// 그래프에 값 입력
for (int i=1 ; i <=E ; i++) {
st = new StringTokenizer(br.readLine());
int[] tempEdge = new int[3];
tempEdge[0] = Integer.parseInt(st.nextToken()); // 시작 정점
tempEdge[1] = Integer.parseInt(st.nextToken()); // 종료 정점
tempEdge[2] = Integer.parseInt(st.nextToken()); // 간선 가중치
G[tempEdge[0]].add(tempEdge); // 시작 정점의 번호 그래프에 경로 정보 저장
}
}
}
G 는 입력값 설정은 아니고 일단 받은 숫자를 사용하기 위한 부분으로 참고만 하면 되겠다.
또는 이런식으로 한줄에 있는 숫자 또는 문자를 한번에 구분자로 읽어들일수도 있다.
for(int i=1;i<=n;i++){
String temp2[] = br.readLine().split(" ");
int sum=0;
for(int j=1;j<=n;j++){
array[i][j]=Integer.parseInt(temp2[j-1]); // 읽어들인 값을 실제 사용할 배열에 저장
}
}