문제 url:
세로읽기
문제:
1.BufferedReader를 이용해 입력을 받는다.
2.[5][15] 크기의 배열 생성
3.총 5번 반복을 하며 글자를 배열에다가 초기화 시킨다.
4.출력시, 인덱스에 값이 존재하지 않을 경우를 제외한 나머지
StringBuilder에 append 시키며 문자를 더해간다.
5.StringBuilder를 출력한다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//출력 시 사용하기 위한 StinrgBuilder
StringBuilder sbd = new StringBuilder();
//한 줄에 1개~15개의 문자를 입력받으며 총 5줄을 입력받기 위한 2차원 배열 생성
char arr[][] = new char[5][15];
// 5줄을 반복하기 위한 반복문
for (int i = 0; i < 5; i++) {
String word = br.readLine();
// 문자열 길이만큼 배열에 넣기 위한 반복문
for (int j = 0; j < word.length(); j++) {
arr[i][j] = word.charAt(j);
}
}
//글자를 StringBuilder에 append하기 위한 반복문
for (int j = 0; j < 15; j++) {
for (int i = 0; i < 5; i++) {
if(arr[i][j] != (char)0) {
sbd.append(arr[i][j]);
}
}
}
System.out.println(sbd);
}
}
코드를 짜는데 어려움은 없었다. 하지만 마지막 출력부분에서 인덱스 값이 공백인 부분에서 처리가 어려워지면서 고민을 하였다.
처음에는 arr[i][j] != (char)0)
이 부분을 arr[i][j] != ' '
이런식으로 하니 공백도 같이 포함되어 출력되었다.
그래서 공백을 제거한 상태로 하려고 replace문을 사용해보려고 했는데, 해당 부분에서 처리하는게 더 맞는 방법이라고 생각하여, 아스키 코드를 조금 더 분석하였고
space 아스키 코드인 32를 알게되었다. 그래서 arr[i][j] != (char)32)
를 해봤는데, 이 역시 마찬가지로 공백을 포함해서 출력되는 것이다..
그러던 중 space는 값이 없어보일 뿐 결국 값이 존재하는거고 현재 상태는 null임을 생각하고, (char)0이 아닌 의문문으로 변경하니 해결할 수 있었다.
※char 배열의 초기 값은 '\0' 이라고 한다. 그래서 (char)32가 아닌 \0을 해도 무방하다.
삽질하는 경험도 나는 중요하다고 생각한다.
삽질도 여러번 하면 근육이 생겨서 다른 삽질을 할 때 도움이 될 것이기 때문이다.