Study with me/프로그래머스 L0 마스터하기
프로그래머스 - L0 왼쪽오른쪽
외계나무
2024. 4. 18. 10:24
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[]{};
}
}