본문 바로가기

Algorithm

[Java] 백준 10798번 : 세로읽기 ver.2

1. 문제

https://www.acmicpc.net/problem/10798

 

10798번: 세로읽기

총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’

www.acmicpc.net

2. 풀이

- 이 문제는 앞 전에 char 형태의 배열을 활용하여 풀었던 문제이다. 친구가 int 형 배열로 바꾸어 구현해보라고 하여 다시 풀어본다.

  • char 형태 배열은 초기값이 '\0'으로 정해져 있지만 int 는 초기값이 0이다. 허나 예제 입력에 0이 입력될 수 있기 때문에 Arrays.fill 메소드를 사용하여 배열에 전부 10이란 값을 초기값으로 지정해주었다.
  • charAt()을 메소드를 사용하여 그 값을 배열에 넣어준다. (char 타입과 int 타입의 연산은 형변환 없이 연산이 가능하다. char형 문자들을 int형 변수에 대입하면 문자 값에 해당하는 아스키코드 10진수 코드로 변환되기 떄문이다.)
  • 마지막 조건문에 배열 안에 값이 10이면 continue를 해준다. (앞전에는 공백 or '\0'이 같으면 continue를 해주었지만, int는 공백이 없고 초기값으로 10을 지정했기 때문에 10이란 조건을 준 것이다.) 
  • 출력을 char형태로 캐스팅하여 출력한다.

3. 코드

package baekjoon;

import java.util.Arrays;
import java.util.Scanner;

public class Q10798 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int[][] arr = new int[5][15];
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 15; j++) {
                Arrays.fill(arr[i], 10);
            }
        }
        for (int i = 0; i < 5; i++) {
            String str = scanner.next();

            for (int j = 0; j < str.length(); j++) {
                arr[i][j] = str.charAt(j);
            }
        }
        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 5; j++) {
                if (arr[j][i] == 10) {
                    continue;
                }
                System.out.print(((char) arr[j][i]));
            }
        }
    }
}