Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 왼쪽오른쪽

외계나무 2024. 4. 18. 10:24

프로그래머스 - level 0 왼쪽 오른쪽

String의 연결 기능을 사용해서 문자열로 만든 다음 split 하는 식으로 구현해봤는데...

테스트 10-15, 17,19, 20에서 실패가 떴다.

import java.util.Arrays;
class Solution {
    public String[] solution(String[] str_list) {
        String answer = "";
        for(String str : str_list) {
            if(str.equals("l")) {
                break;
            } else if(str.equals("r")) {
                answer = "";
                for(int i=Arrays.asList(str_list).indexOf("r"); i<str_list.length; i++) {
                    answer += (" "+str_list[i]);
                }
                break;
            } else {
                answer += (" "+str);
            }
        }
        String[] answers = answer.trim().split(" ");
        return answers[0].equals("") ? new String[]{} : answers;
    }
}

 

테스트 케이스를 하나 추가해서 "r"이 먼저 떴을 때 답안 문자열 배열에 "r"이 포함되어 있는 것을 발견하고 수정했다.

케이스 12, 19에서 여전히 실패가 뜬다.

import java.util.Arrays;
class Solution {
    public String[] solution(String[] str_list) {
        String answer = "";
        for(String str : str_list) {
            if(str.equals("l")) {
                break;
            } else if(str.equals("r")) {
                answer = "";
                for(int i=Arrays.asList(str_list).indexOf("r")+1; i<str_list.length; i++) {
                    answer += (" "+str_list[i]);
                }
                break;
            } else {
                answer += (" "+str);
            }
        }
        String[] answers = answer.trim().split(" ");
        return answers[0].equals("") ? new String[]{} : answers;
    }
}

 

"r"도 "l"도 나오지 않은 경우를 빼먹었다.

다음 코드를 추가해줬다.

if(answers.length == str_list.length) return new String[]{};

 

일단 테스트 통과.

System.arraycopy를 사용해서 풀어보았다. 보기엔 훨씬 깔끔하군.

import java.util.Arrays;

class Solution {
    public String[] solution(String[] str_list) {
        for(String str : str_list) {
            if(str.equals("l")) {
                String[] answers = new String[Arrays.asList(str_list).indexOf("l")];
                System.arraycopy(str_list, 0, answers, 0, answers.length);
                return answers;
            }
            if(str.equals("r")) {
                int r = Arrays.asList(str_list).indexOf("r");
                String[] answers = new String[str_list.length - r -1];
                System.arraycopy(str_list, r+1, answers, 0, answers.length);
                return answers;
            }
        }
        return new String[]{};
    }
}