SHORTCUT
0. Scanner 대신 BufferedReader !
- BufferedReader 는 버퍼를 이용하여 한번에 데이터를 입력하기 때문에 메모리 관리가 더욱 용이하다.
- 입력받는 값이 많고, 테스트 케이스(tc)가 많은 경우 Scanner보단 BufferedReader를 활용하자.
- br.readLine() 로 사용한다.
1. 띄어쓰기(구분자) 존재 : split()
입력값
/** 1. 숫자 입력 */
1 // test-case
2 // M 행
4 // N 열
1 14 55 66 //i번째 행 값
2 45 56 45 //j번째 행 값
/** 2. 문자 입력 */
A C C D //i번째 행 값
B F A D //j번째 행 값
방법
- 띄어쓰기로 구분되어 있는 경우, StringTokenizer도 가능하나, 따로 선언하기 귀찮으니 Stirng의 split() 메소드를 사용하자.
- br.readLine().split(" ") : 원하는 구분자(" ". "/")를 기준으로 String을 짤라 배열에 삽입한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//int형은 Integer.parseInt() 로 형변환을 시킨다.
int tc = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine()); //행
int N = Integer.parseInt(br.readLine()); //열
//2*4 배열로 들어온 값을 저장하기 위한 배열
for (int i = 0 ; i < M ; i++){ //행
String token[] = br.readLine().split(" "); //한 줄을 읽어와서 4칸짜리 배열에 삽입
for (int j = 0 ; j < N ; j++ ){ //열
map[i][j] = token[j]; //해당 배열의 0~3번째 인덱스 값을 처리
}
}
/** 문자 입력 */
//Integer.parseInt 변환 없이 String에 넣거나 (char) 캐스팅 하여 사용한다
2-1. 띄어쓰기 없음 : charAt()
입력값
1 // test-case
2 // M 행
4 // N 열
1951 //i번째 행 값
9981 //j번째 행 값
방법
- 구분자가 없으니, Stirng의 charAt() 메소드를 사용하자.
- text.charAt(i) : 해당 문자열의 i번째 인덱스 값을 char 형으로 반환한다.
- 만약 숫자가 입력되었을 경우, '0' 을 빼주어 유니코드 값이 아닌 int형으로 바꾸어야 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//int형은 Integer.parseInt() 로 형변환을 시킨다.
int tc = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine()); //행
int N = Integer.parseInt(br.readLine()); //열
//2*4 배열로 들어온 값을 저장하기 위한 배열
for (int i = 0 ; i < M ; i++){ //행
String input = br.readLine(); //입력된 값 String 저장
for (int j = 0 ; j < N ; j++ ){ //열
map[i][j] = input.charAt(j) - '0'; //해당 문자열의 인덱스 값 int형 변환(-'0')
}
}
// 1 9 5 1
// 9 9 8 1
/** 문자 입력 */
//charAt()하면 char형태로 변환된다. 그냥 사용한다.
2-2. 띄어쓰기 없음 : toCharArray();
입력값
1 // test-case
2 // M 행
4 // N 열
1951 //i번째 행 값
9981 //j번째 행 값
방법
- 또 다른 방법은 입력받은 String의 각 자리를 char 배열에 저장시키는 toCharArray() 를 사용하는 것이다.
- char input[] = br.readLine().toCharArray() : 입력 값을 자동으로 나누어 char 배열에 저장한다.
- 잊지마라. readLine()이 String으로 읽어와도, toCharArray()의 반환값은 char 배열이다.
- 만약 숫자가 입력되었을 경우, '0' 을 빼주어 유니코드 값이 아닌 int형으로 바꾸어야 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//int형은 Integer.parseInt() 로 형변환을 시킨다.
int tc = Integer.parseInt(br.readLine());
int M = Integer.parseInt(br.readLine()); //행
int N = Integer.parseInt(br.readLine()); //열
//2*4 배열로 들어온 값을 저장하기 위한 배열
for (int i = 0 ; i < M ; i++){ //행
char charInput[] = br.readLine().toCharArray(); //자동으로 char 배열 변환 저장
for (int j = 0 ; j < N ; j++ ){ //열
map[i][j] = charInput[j] - '0'; //숫자로 변환하기 위해 -'0'
}
}
// 1 9 5 1
// 9 9 8 1
/** 문자 입력 */
//charAt()하면 char형태로 변환된다. 그냥 사용한다.