[인터돌™] 공부 해보자!! 열심히~~~

반응형

백준온라인에서 문제를 풀려면 모든 문제가 입력 값을 받는 부분을 작성해야 한다.

방법은 많지만 속도 때문에 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]); // 읽어들인 값을 실제 사용할 배열에 저장
                
            }
        }

 

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band