티스토리 뷰

개요

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
링크
«   2024/04   »
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
글 보관함