문자열을 요소로 갖는 배열을 입력받아 문자열을 세로로 읽었을 때의 문자열을 리턴해야 합니다.
arr[]
중에서 가장 긴 문자열의 길이arr[]
의 갯수public String readVertically(String[] arr) {
int ROW = Stream.of(arr).mapToInt(String::length).max().orElse(0);
int COL = arr.length;
String result = "";
for (int i = 0; i < ROW; i++) {// 가로
for (int j = 0; j < COL; j++) { // 세로
if (arr[j].length() >= i + 1) { // 조건 확인
result += arr[j].charAt(i);
}
}
}
return result;
}
문제에서 말한 그대로, 이중 for문을 통해서 문자열 배열을 세로로 읽었다.
각 문자열마다 길이가 다르기 때문에, 세로로 이동할 때마다 if문을 통해서 해당 인덱스가 존재하는지 체크했다.
해당 코드는 임시 배열을 생성하였다.
temp 배열은 i 번째 인덱스에 i 번째 문자들을 저장한다.
굳이 세로로 이동하면서 읽지 않고, 하나의 문자열을 가로로 읽어서 temp 배열의 알맞은 인덱스에 저장해준다.
temp[n]
에는 모든 문자열의 n 번째
문자가 들어간다.
public class Solution {
public static String readVertically(String[] arr) {
int maxLength = 0; // 가장 긴 문자열의 길이
for (int i = 0; i < arr.length; i++) {
if (maxLength < arr[i].length()) {
maxLength = arr[i].length();
}
}
// 임시로 해당 길이만큼의 배열을 선언
String[] temp = new String[maxLength];
for (int i = 0; i < arr.length; i++) {
String str = arr[i];
for (int j = 0; j < str.length(); j++) {
if (temp[j] == null) {
// 문자열의 j번째 char를 String으로 변환후 배열에 삽입 (세로 위치 첫 문자열)
temp[j] = Character.toString(str.charAt(j));
} else { // 배열이 비어있지 않다면, 임시 배열의 기존 문자열에 현재 j번째 char를 더해줍니다.
temp[j] = temp[j] + str.charAt(j);
}
}
}
String result = "";
for (int i = 0; i < temp.length; i++) {
result = result + temp[i];
}
return result;
}
}