생각보다 어렵고 문법 이해를 도와준 고마운 문제이다.
처음에 헤매었던 것은 문자열을 얼마나 받을지가 정해지지 않는다는 점이었다.
어떤식으로어떤 식으로 구현을 할까 생각하다가 나의 자바 지식끈이 짧아 다른 문제에서 어떤 식으로 처리하는 지만 참고를 했다.
보통의 사람들은 해당 예제의 열 갯수로 지정했더라.
내가 생각한 로직은 이렇다.
이중 for문으로 2차원배열 구현, 띄어쓰기가 없으니 StringTokenizer 사용x
모두 입력 받고, 똑같이 이중 for문으로 세로 출력
이 문제 또한 입력값이 매우 작아 시간제한과 문자열 제한은 신경 안 써도 된다고 판단했다.
먼저 내가 구현한 코드이다.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char [][]arr = new char[5][15];
String str = "";
for (int i = 0; i < 5; i++) {
str = br.readLine();
for (int j = 0; j < str.length(); j++) {
arr[i][j] = str.charAt(j);
}
}
for (int i = 0; i < str.length(); i ++) {
for (int j = 0; j < 5; j++) {
System.out.print(arr[j][i]);
}
}
}
}
결과는,,
확인해보니, 나에게는 두 개의 문제점이 있었다.
1. 출력 for문에서 str.length() 사용
for (int i = 0; i < str.length(); i ++) {
for (int j = 0; j < 5; j++) {
System.out.print(arr[j][i]);
}
}
문제에서 행은 가변길이여서 나는 str.length()를 하면 될 줄 알았다. 하지만, 해당 로직은 틀린 로직이어서 최대 길이인 15로 다시 바꾸고, null 값이면 continue 하게 로직을 수정했다.
2. char 배열의 null값 지정x
for (int i = 0; i < 15; i ++) {
for (int j = 0; j < 5; j++) {
if (arr[j][i] == '\u0000')
continue;
System.out.print(arr[j][i]);
}
}
나는 String이나 Integer 같은 Reference Type이라면, null이나. equals 같은 객체 참조가 가능하지만,
char, int 등.. Primitive Type은 null 사용이 안되어 초기값으로 판단을 해야 되는 것이었다!
char에서 '\u0000', '\0' 모두 상관없이 똑같은 초기값이지만, java에서는 '\u0000'이 옳은 표현이라고 한다.('\0'(c, c++))
Primitive와 Reference의 주요 차이
특징Primitive TypeReference Type
null 사용 가능 여부 | 불가능 | 가능 |
초기값 | 직접 지정 (0, false 등) | null |
값 비교 방식 | == (값 비교) | .equals() (값 비교) 또는 == (참조 비교) |
메모리 저장 방식 | 값 자체 저장 | 객체 주소 저장 |
[최종 코드]
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
char [][]arr = new char[5][15];
String str = "";
for (int i = 0; i < 5; i++) {
str = br.readLine();
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] == '\u0000')
continue;
System.out.print(arr[j][i]);
}
}
}
}
[배운점]
참조형과 기본형 타입에 대한 문법을 확실하게 이해했다!
또한 입력 끝을 안 알려줬을 때, 해당 방식으로 예제 코드처럼 해야겠다고 느꼈다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 2720 - 세탁소 사장 동혁 (0) | 2024.11.28 |
---|---|
[백준 JAVA] 2536 - 색종이 (1) | 2024.11.27 |
[백준 JAVA] 2566 - 최댓값 (0) | 2024.11.27 |
[백준 JAVA] 2738 - 행렬 덧셈 (0) | 2024.11.27 |
[백준 JAVA] 25206 - 너의 평점은 (0) | 2024.11.26 |