Scanner
vs. BufferedReader
입력의 경우 7~8배, 출력의 경우 거의 40배 가량 차이가 난다고 합니다
BufferedReader
와 Scanner
의 차이점BufferedReader
Scanner
https://juno-juno.tistory.com/99
BufferedReader
, StringTokenizer
public void solution() throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// int 입력 받기
int n = Integer.parseInt(br.readLine());
// n*n크기의 int 배열 입력받기
int[][] arr = new int[n][n];
for(int r=0;r<n;r++){
StringTokenizer st = new StringTokenizer(br.readLine());
for(int c=0;c<n;c++){
arr[r][c] = Integer.parseInt(st.nextToken());
}
}
}
readLine
: 개행까지 읽음
생성자 | 설명 |
---|---|
public StringTokenizer(String str); | 절달된 매개변수 str을 기본(default) delim으로 분리합니다. 기본 delimiter는 공백 문자들인 " \t\n\r\t"입니다. |
public StringTokenizer(String str,String delim); | 특정 delim으로 문자열을 분리합니다. |
public StringTokenizer(String str,String delim,boolean returnDelims); | str을 특정 delim으로 분리시키는데 그 delim까지 token으로 포함할지를 결정합니다. 그 매개변수가 returnDelims로 true일시 포함, false일땐 포함하지 않습니다. |
BufferedWriter
println
처럼 자동으로 개행을 출력해 주지 않음 → 필요시 newLine()
별도로 호출bw.flush()
: 남아있는 데이터 비우기bw.close()
: 출력 스트림 모두 닫기BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int r = 0; r < n; r++) {
for (int c = 0; c < n; c++) {
bw.write(String.valueOf(arr[r][c]));
}
bw.newLine();
}
bw.flush();
}
StringBuilder
로 모아서 System.out.println()
으로 출력StringBuilder sb = new StringBuilder();
for (int r = 0; r < n; r++) {
for (int c = 0; c < n; c++) {
sb.append(arr[r][c]);
}
sb.append('\n');
}
System.out.print(sb);
노드의 방문 여부를 표시하는 visited[v]
업데이트시 해당 코드의 위치 주의
ex)
while (!queue.isEmpty()) {
nextIdx = queue.poll();
r = nextIdx / MUL;
c = nextIdx % MUL;
for (int d = 0; d < 4; d++) {
nr = r + dr[d];
nc = c + dc[d];
if (isInRange(nr, nc) && (input[nr][nc] > 0)) {
queue.offer(MUL * nr + nc);
input[nr][nc] = 0;
area++;
}
}
}