본문 바로가기

java

백준 10798번 문제 세로읽기(Java_자바)

 

오늘은 백준 10798 세로읽기를 풀어보자!

아래 문제부터 보자!


 

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

 

10798번: 세로읽기

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

www.acmicpc.net

 

10798번 세로읽기 문제

 

10798번 세로읽기 입력/출력

 

 

2차원 'char' 배열을 사용하여 문제를 풀어보자!

 

문제를 해석하자면,

1.각 문자열을 'char' 배열로 저장하고

2. 해당 배열의 행과 열을 바꾸어 출력

 

<고려사항>

1. 총 다섯줄을 입력

(0행 ~ 4행 or 1행 ~ 5행)

 

2. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다.

(0열 ~ 14 열 or 1열 ~ 15열)

 

 

아래에 하나씩 정리해보자!

 


 

우선, 입력받을 문자열을 저장할 2차원 char 배열을 선언하자!

위에서 정리한 고려사항 참고!!

 

char[][] charArray = new char[5][15];

 

 

이제 문자열을 2차원 char 배열에 저장하자!

for (int i = 0; i < 5; i++) {
   String str = sc.next();
   for (int j = 0; j < str.length(); j++) {
        charArray[i][j] = str.charAt(j);
   }
}

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 15; j++) {
        if('\0' != charArray[i][j]){
            System.out.print(charArray[i][j]);
        }
    }
    System.out.println();
}

 

현재 이중 for문 중

아래에 있는 이중 for문이 정상적으로 출력되나 확인해 보자!

 

input/output

음... 정상으로 출력되는 걸 확인!


여기서 잠깐!!!

출력 이중 for문에 조건식을 추가하지 않을 경우,

문자열 배열에서 문자열의 길이가 배열의 크기보다 작을 때

나머지 공간에 null 문자('\0')가 채워지는 경우 고려!

 

if('\0' != charArray[i][j]){
    System.out.print(charArray[i][j]);
}

조건식 미포함 input/output

 


 

다 합치자!

이 위 조건식을 사용해서

배열의 각 문자열을 세로로 출력하자!

 

Scanner

import java.util.Scanner;

public class LengthRead_10798 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        char[][] charArray = new char[5][15];

        for (int i = 0; i < 5; i++) {
            String str = sc.next();
            for (int j = 0; j < str.length(); j++) {
                charArray[i][j] = str.charAt(j);
            }
        }

        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 5; j++) {
                if('\0' != charArray[j][i]){
                        System.out.print(charArray[j][i]);
                }
            }
        }

    }
}

 

 

결과!!
성공!!!


다른 입력 방식을 사용해 보자!

 

BufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class LengthRead_10798 {
    public static void main(String[] args) throws IOException {

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

        char[][] charArray = new char[5][15];

        for (int i = 0; i < 5; i++) {
            String str = br.readLine();
            for (int j = 0; j < str.length(); j++) {
                charArray[i][j] = str.charAt(j);
            }
        }

        for (int i = 0; i < 15; i++) {
            for (int j = 0; j < 5; j++) {
                if('\0' != charArray[j][i]){
                        System.out.print(charArray[j][i]);
                }
            }
        }

    }
}

 

메모리가 줄었다..!

 

역시 'BufferedReader'를 사용하는 게 'Scanner'에 비해 약간 코드가 길어지긴 하지만

성능면에서는 더 효율적인 거 같다!

 

 

 

열심히 하자!!