728x90

[문제 설명]

문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

[입출력 예]

my_string index_list result
"cvsgiorszzzmrpaqpe" [16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] "programmers"
"zpiaz" [1, 2, 0, 0, 3] "pizza"

 

[차근 차근 생각해보기]

  1. my_string의 문자열을 한자리씩 가져오기 쉽게 나누어 배열로 만든다.
  2. index_list의 길이까지 돌면서 answer에 str의 i번째를 넣어준다.
  3. answer를 return 한다.     

 

[코드]

<수정전>

class Solution {
    public String solution(String my_string, int[] index_list) {
        String[] answer = new String[index_list.length];

        String[] str = my_string.split("");

        for(int i = 0; i < index_list.length; i++){
            for(int j = 0; j < str.length; j++){
                if(index_list[i] == j){
                    answer[i] = str[j];
                }
            }
        }  

        return String.join("", answer);
    }
}

<수정후>

class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        String[] str = my_string.split("");

        for(int i = 0; i < index_list.length; i++){
            answer += str[index_list[i]];   
        }  

        return answer;
    }
}

 

[반성할 점]

처음의 answer 배열의 길이를 index_list의 길이 만큼 만들어주고 my_string의 값을 하나씩 가져오기 위해 split메소드를 이용하여 str 배열을 만들어주었다. index_list 길이만큼 돌면서 str의 길이 만큼 또 반복해주고 만약에 index_list의 i번째가 j와 같다면 answer 배열에 str의 j번째 원소를 넣어 String.join 메소드를 이용하여 문자열을 return 하는 방법으로 풀었다.

 

하지만 위의 풀이를 보고 있는데 복잡하고 필요 없는 코드가 많다고 생각했다. 나에게 항상 많은 도움을 주시는 분께 코드의 문제점에 대해 물어봤고 굳이 answer를 배열로 지정 해주지 않고 그냥 문자열로 초기화 해준 뒤 index_list의 길이만큼 돌면서 answer에 str의 index_list의 i번째를 넣어주면 된다고 하였다.

 

훨씬 간결하고 깔끔한 코드였다. 생각해보니 배열의 원소를 가져올때 대괄호 안에 인덱스를 넣어주는데 index_list[i] 이 코드를 넣어주면 i가 0일때 index_list의0번째인 16이 나올것이고 그럼 str[16]이 되니 p가 나올 것이다.

 

이렇게 유연한 사고를 하며 풀어야하는데 아직은 그러지 못하는 것 같다..(마음이 급한 것도 한 몫이 되는 듯..)

차근차근 하나하나 하다 보면 언젠간 성장해 있을 내 모습을 보며 화이팅 해야겠다.      

728x90

+ Recent posts