다디와 괴발개발

[Java] Java에서 char 배열 입력받는 방법 본문

알고리즘/Java

[Java] Java에서 char 배열 입력받는 방법

아임다디 2022. 7. 24. 20:12

자바에서 입력을 받기위한 방법으로는 크게 두 가지가 있다.

첫 번째, Scanner를 이용한 입력

두 번째, BufferedReader를 이용한 방법

Scanner도 편하고 좋지만, BufferedReader가 더 빨라 알고리즘 문제를 풀 때는 BufferedReader 사용을 더 권장한다고 한다.

이번 포스팅에서는 Java에서 char 배열을 입력 받기 위한 여러 방법들을 적어보았다.

1. Scanner를 이용한 입력방법

G B G B B G
B B G B B B
G G B B G B
G G G G B B
G G G G G B

배열의 입력은 다음과 같이 들어온다고 가정해보자,

Scanner에서는 nextInt() 처럼 nextChar() 함수가 없다.

따라서 next().charAt(0)을 사용해서 입력을 받아야 한다.

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
char arr [][] = new char[n][n];

for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
        arr[i][j] = sc.next().charAt(0);
    }
}

2. BufferedReader를 이용한 방법

배열의 예시는 1번과 같다고 가정한다

BufferedReader는 한 줄씩 읽는 것이 특징이고, 무조건 String으로 읽기 때문에 다른 타입을 받을 경우 형변환을 해주어야 한다

또한 예외 처리를 해주어야 한다

    public static void main(String[] args) throws IOException{ // IO 예외 처리

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        char arr [][] = new char[n][n];

        for(int i=0; i<n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int j=0; j<n; j++){
                arr[i][j] = st.nextToken().charAt(0);
                // 만약 int 배열이라면?
                // arr[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        br.close(); // 입력을 다 받았으면 닫아주어야 한다
    }

이번에는 들어오는 배열이 다음과같이 다닥다닥 붙어있는 경우에 대해서 다루어보고자 한다

GBGBBG
BBGBBB
GGBBGB
GGGGBB
GGGGGB

3. BufferedReader & charAt()을 이용한 읽기

문자열이 다닥 붙어있으므로 nextToekn()을 사용할 수 없다. nextToken은 띄어쓰기 기반으로 받아오기 때문이다

    public static void main(String[] args) throws IOException{ // IO 예외 처리

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        char arr [][] = new char[n][n];

        for(int i=0; i<n; i++){
            String line = br.readLine();
            for(int j=0; j<n; j++){
                arr[i][j] = line.charAt(j); // charAt()을 이용하여 한 문자씩 받아준다
            }
        }

        br.close();
    }

근데 사실 이 방법보다 더 쉬운 방법이 있다.

4. BufferedReader & toCharArray()를 이용한 읽기

toCharArray()는 문자열을 char 배열로 바꿔주는 함수이다.
이를 이용해주면 아주 간단하게 배열을 읽어올 수 있다

    public static void main(String[] args) throws IOException{ // IO 예외 처리

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        char arr [][] = new char[n][n];

        for(int i=0; i<n; i++){
            String line = br.readLine();
            arr[i] = line.toCharArray(); // toCharArray()를 통해 각 행에 해당하는 배열을 한꺼번에 받을 수 있다
        }

        br.close();
    }

추가 : 파일로 인풋을 받을 때

콘솔로 테스트 해볼 때 마다 입력값을 주기 귀찮으므로, 파일로 인풋을 입력받고자 할 때는 다음라인을 제일 처음에 추가해주면 된다

 System.setIn(new FileInputStream("Input.txt");

이 때, 인풋 파일의 경로는 프로젝트의 최상위 경로로, 만약 src 디렉토리 안에 파일이 있는 경우라면 src/Input.txt로 경로를 수정해주면 된다

자바는 왜이렇게 귀찮게 굴까
C++ 하다가 오니까 적응이 안된다 😫