[String] 문자열을 세로로 읽기

박채은·2022년 12월 7일
0

코딩테스트

목록 보기
7/52

문제

문자열을 요소로 갖는 배열을 입력받아 문자열을 세로로 읽었을 때의 문자열을 리턴해야 합니다.

[코플릿 - readVertically]


내가 작성한 코드

  • ROW : arr[] 중에서 가장 긴 문자열의 길이
  • COL : 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;
    }
}

0개의 댓글