백준 10798 세로읽기 JAVA

sundays·2023년 6월 1일
0

문제

세로읽기

풀이

첫번째 풀이

StringBuilder sb = new StringBuilder();
Character[][] arr = null;
for (int i = 0; i < 5; i++) {
	String s = sc.next();
	if (arr == null) {
		arr = new Character[5][s.length()];
	}
	for (int j = 0; j < s.length(); j++) {
		arr[i][j] =  s.charAt(j);
	}
}

for (int i = 0; i < arr[0].length; i++) {
	for (int j = 0; j < arr.length; j++) {
		if (arr[j][i] != null) {
			sb.append(arr[j][i]);
		}
	}
}
System.out.println(sb);

이풀이는 ArrayIndexOfBound가 난다
내가 간과한 점은 각 줄에 위치한 데이터들의 길이가 전부 다를수가 있다는 점이었다 예를 들면
내 코드의 경우에는 초기화가 바로 되는 코드인데, 첫번째 줄에서 초기화가 되는 경우이다

하지만이런경우에는 데이터를 초기화하는데 문제가 있다

111
1111
111
1111
11

그래서 char 배열 초기화를 처음부터 최대로 잡아주는 게 좋다 이렇게 하면 for 문에서 접근할때도 오류가 나지 않는다

// 초기배열은 최대로 생성해주어야 한다
// 배열의 크기가 줄별로 다르기 때문!
Character[][] arr = new Character[5][15];

int maxLength = 0;
for (int i = 0; i < 5; i++) {
	..
    // 가장 큰 배열의 크기로 잡아주고 나중에 출력할때 필요하다
	maxLength = Math.max(maxLength, s.length());
	..
}

for (int i = 0; i < maxLength; i++) {
	for (int j = 0; j < arr.length; j++) {
		if (arr[j][i] != null) {
			sb.append(arr[j][i]);
		}
	}
}

전체 코드

전체 코드

profile
develop life

0개의 댓글