티스토리 뷰
개요
Scanner는 Java로 앱을 개발 할 때 많이 쓰지는 않습니다. 오랜만에 쓰려고 하면 잘 기억이 안날때가 있어서 이 글을 남겨둡니다. 코드업은 코드를 업로드 하면 컴파일 하고 standard input으로 입력값을 넘겨주는식으로 작동하고 있습니다. 그래서 코드에서도 입력받는 부분을 추가 해주어야 합니다.
BufferedReader 사용하는 경우
BufferedReader를 써야 하는 이유는 Scanner를 써서 풀었을 때 속도 이슈로 통과를 못하는 경우가 있기 때문입니다. 대체로는 사용방법이 조금 더 간단한 Scanner를 쓰면 됩니다.
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
int n = Integer.parseInt(bf.readLine());
String sArr = bf.readLine();
sArr += " ";
int[] arr = new int[n];
int idx = 0;
String num = "";
for (int i = 0; i < sArr.length(); i++) {
if (' ' == sArr.charAt(i)) {
arr[idx] = Integer.parseInt(num);
num = "";
idx ++;
} else {
num += sArr.charAt(i);
}
// 공백이 나올때까지 저장 공백이
// 나오면 초기화 하고 idx를 늘림
}
Buffered Reader Static void
readLine()한 줄을 int로 변환 후 static method호출
public class Main {
public static void printNum(int n) {
}
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //선언
int n = Integer.parseInt(bf.readLine());
printNum(n);
}
}
시간초과 나는 경우
BufferedWriter를 써서 시간을 조금이라도 줄일 수 있습니다.
public static void printArr(boolean[][] visited) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
for (int i = 0; i < visited.length; i++) {
// System.out.println(Arrays.toString(visited[i]));
for (int j = 0; j < visited.length; j++) {
if (visited[i][j]) {
bw.write('*');
} else {
bw.write(' ');
}
}
bw.newLine();
}
bw.flush();
bw.close();
}
한줄에 여러개 숫자가 나오는 경우 읽는 법
한줄에 여러개 숫자를 주는 경우가 많은데요 .split()을 한 후 ParseInt를 매번 하는 것 보다는 Scanner.nextInt()를 쓰는 방식이 손이 덜 갑니다.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] numbers = new int[n];
int targetIdx = -1;
for (int i = 0; i < n; i++) {
numbers[i] = scanner.nextInt();
}
두번째줄이 split이 안되기 때문에 nextInt()로 해결 합니다.
숫자 n개를 주는 경우
개수가 정해져 있는 경우는 개수만큼 만들어 줘도 됩니다. 코드업은 일단 풀고 넘어가는 식으로 많은 문제를 푸는게 더 낫다는 생각입니다.
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = new int[3];
arr[0] = scanner.nextInt();
arr[1] = scanner.nextInt();
arr[2] = scanner.nextInt();
// 짝수만 출력하기
for (int i = 0; i < arr.length; i += 1) {
if(arr[i] % 2 == 0){
System.out.println(arr[i]);
}
}
}
여러줄의 숫자로 나오는 경우 읽는 법
https://codeup.kr/problem.php?id=2081
line으로 나올 경우 읽는 법
public static void main(String[] args) {
String x, y, z;
Scanner sc = new Scanner(System.in);
x = sc.nextLine();
y = sc.nextLine();
z = sc.nextLine();
}
배열 출력 하는 법
public void printArray() {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid.length; j++) {
System.out.printf("%d ", grid[i][j]);
}
System.out.println("");
}
}
1부터 시작하는 배열 출력 하는 법
public void printArray2() {
for (int i = 1; i < grid.length; i++) {
for (int j = 1; j < grid[1].length; j++) {
System.out.printf("%d ", grid[i][j]);
}
System.out.printf("\n");
}
}
10 * 10 형태의 배열 읽기
public static String[][] arrFromScanner() {
Scanner sc = new Scanner(System.in);
String[][] arr = new String[10][10];
for (int i = 0; i < 10; i++) {
arr[i] = sc.nextLine().split(" ");
}
return arr;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커컨테이너
- 싱가폴
- 이직
- shellscript
- 2017 티스토리 결산
- 도커티슈박스
- docker container whale
- docker container tissue box
- vim
- docker container tissue
- 도커각티슈케이스
- docker container
- Sh
- Linux
- 도커티슈케이스
- 도커각티슈박스
- docker container case
- 개발자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함