Algorithm_PS

백준_10798(세로읽기)

Frisbeen 2023. 10. 19. 17:56

10798번: 세로읽기 (acmicpc.net)

 

10798번: 세로읽기

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

www.acmicpc.net

5개의 단어를 입력받아 이를 세로로 읽은 값을 띄어쓰기 없이 출력하는 프로그램이다.

각각의 다른 단어들의 글자 순서대로 출력을 하는 것이니까 2중배열을 쓴다면 간단히 해결될 것 같았다.

여기서의 중요한 점은 단어들의 글자수가 다를 수 있다는 것.

예를들어 

apple

banana

1234

ABee3

답 = ab1Apa2Bpn3ela4een43n3a

마지막 n3이나 a같은 경우 다른 단어들의 알파벳이 없기에 이렇게 짧게 나오는 것. 즉 단어수가 없을 경우도 고려해야한다는 것이다.

 

내 아이디어는 어차피 input의 조건은 5개의 단어 최대 15글자라고 했다. 즉, 한 단어의 길이가 15자를 넘을 순 없다.

따라서 이중배열의 크기를 [5][15]로 고정시켜놓는다면? 5개의 단어를 input하고 2중배열속 행 배열에다가 단어를 input하여도 15개의 index자리중 나머지 자리는 null로 기본 set되기에 이를 조건문에 넣어서 출력하면 쉽겠다.

 

char arr[5][15]라는 배열에서 열 index를 고정하고 행 index 1,2,3,4,5를 움직이면서 null인지 아닌지를 판단하고 null이라면 continue; 아니라면 그 char을 출력하면 문제 조건에 합당한 코드겠다.

 

출력 조건이 띄어쓰기가 없이 쭉 print하는거라 오히려 편한 문제.

package 백준;
import java.util.Scanner;
public class _10798_세로읽기 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		char[][] arr =  new char[5][15];
		
		//배열에 값 넣기
		for(int i=0; i<5; i++) {
			String st = sc.next();
			for(int j=0; j<st.length(); j++) {
				arr[i][j] = st.charAt(j);
			}
			
		}
		
		
		for(int j=0; j<15; j++) {
			for(int i=0; i<5; i++) {
				if(arr[i][j] == '\u0000') {
					continue;
				}
				else {
					System.out.print(arr[i][j]);
				}
			}
		}
		sc.close();

	}

}

'Algorithm_PS' 카테고리의 다른 글

백준_2745 <진법 변환>  (1) 2023.10.26
백준_2563 <색종이>  (0) 2023.10.20
백준_2941(크로아티아 알파벳)  (0) 2023.10.18
백준_25206 (너의 평점은)  (1) 2023.10.16
백준_10811 (바구니 뒤집기)  (0) 2023.10.16