본문 바로가기
Java/알고리즘

문자열배열 세로로 읽어버리기

by 티코딩 2022. 12. 5.

문자열배열을 입력받아 세로로 읽을때처럼 출력하는 문제였다. 예를 들어

"hello"

"world"면

"hweolrllod" 이렇게 출력하는 문제였다.

그래서 일단 빈문자열을 만들고 길이순으로 정렬하고, 이중반복문으로 한글자씩 넣어줬는데

대체 왜 틀렸지 하며 머리아팠는데 다시 문제를 보니

"hi"

"world"면

"hwiorld"가 나와야하는데

내가 길이순으로 정렬해서.. 바보같이...

길이순으로 정리하는게 아니라 가장 긴길이를 구하고 구한만큼 반복해야 하는건데....정렬을 바꾸는게 아니라..

처음 짠 코드는 이랬다. 테스트가 잘 통과하길래 뭔문제지? 했다...

public class Main {
    public static void main(String[] args) {
       String[] arr = new String[]{"aaaaa", "bbbbb","cccc"};
       //빈문자열 만들기
       String result = "";
        //길이가 긴 순서대로 정렬
        Arrays.sort(arr, new Comparator<String>() {
            public int compare(String s1, String s2) {
                return s2.length() - s1.length();
            }
        });
        //이중반복문으로 각 요소 순회하고 result에 한글자씩 넣어주기
        for(int j = 0; j < arr[0].length(); j++){
            for(int i = 0; i < arr.length; i++){
                if(j >= arr[i].length()){
                    continue;//만약 뒤의 문자가 더 짧을때 없는 요소는 무시해야 한다.
                }
                result += arr[i].charAt(j);
            }
        }
        System.out.println(result);
    }
}

 

그래서 정렬을 빼고 가장 긴요소를 찾고 그 길이만큼 반복해줬다.

public class Main {
    public static void main(String[] args) {
       String[] arr = new String[]{"aaaaa", "bbbbb","cccc"};
       //빈문자열 만들기
       String result = "";
       //가장 긴 요소 찾아내자!
       int maxLength = 0;

        for(int i = 0; i < arr.length; i++) {
            if(maxLength < arr[i].length()) {
                maxLength = arr[i].length();
            }
        }
        //이중반복문으로 각 요소 순회하고 result에 한글자씩 넣어주기
        for(int j = 0; j < maxLength; j++){
            for(int i = 0; i < arr.length; i++){
                if(j >= arr[i].length()){
                    continue;//만약 뒤의 문자가 더 짧을때 없는 요소는 무시해야 한다.
                }
                result += arr[i].charAt(j);
            }
        }
        System.out.println(result);
    }
}

와! 이러니깐 바로 모든 테스트를 통과했다. 문제가 정말안풀릴땐 리프레시 해주고 다시 봐야할것같다. 근본적인 문제가있었는데 이걸 발견 못하다니..