728x90
[문제 설명]
문자열 리스트 str_list에는 "u", "d", "l", "r" 네 개의 문자열이 여러 개 저장되어 있습니다. str_list에서 "l"과 "r" 중 먼저 나오는 문자열이 "l"이라면 해당 문자열을 기준으로 왼쪽에 있는 문자열들을 순서대로 담은 리스트를, 먼저 나오는 문자열이 "r"이라면 해당 문자열을 기준으로 오른쪽에 있는 문자열들을 순서대로 담은 리스트를 return하도록 solution 함수를 완성해주세요. "l"이나 "r"이 없다면 빈 리스트를 return합니다.
[입출력 예]
str_list | result |
["u", "u", "l", "r"] | ["u", "u"] |
["l"] | [] |
[차근 차근 생각해보기]
- l과 r 둘다 있는 경우
- l이 먼저 나오면 왼쪽 문자열을 순서대로 (l < r)
- r이 먼저 나오면 오른쪽 문자열을 순서대로 (r < l)
- l은 있지만 r이 없는 경우
- r은 있지만 l이 없는 경우
- l과 r 둘다 없으면 빈 리스트
[코드]
import java.util.*;
class Solution {
public String[] solution(String[] str_list) {
String[] answer = {};
List<String> str = new ArrayList<>(Arrays.asList(str_list));
List<String> list = new ArrayList<>();
if(str.contains("l") && str.contains("r")){
int l = str.indexOf("l");
int r = str.indexOf("r");
if(l < r){
for (int i = 0; i < l; i++) {
list.add(str.get(i));
}
}else{
for (int i = r + 1; i < str.size(); i++) {
list.add(str.get(i));
}
}
}else if(str.contains("l") && !str.contains("r")){
int l = str.indexOf("l");
for (int i = 0; i < l; i++) {
list.add(str.get(i));
}
}else if(!str.contains("l") && str.contains("r")){
int r = str.indexOf("r");
for (int i = r + 1; i < str.size(); i++) {
list.add(str.get(i));
}
}else{
list.add("");
}
answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
if(list.get(i) == ""){
answer = new String[]{};
break;
}
answer[i] = list.get(i);
}
return answer;
}
}
[반성할 점]
진짜 너무 어려웠다..😭 그냥 문제만 보고 생각나는 대로 풀었는데 뭔가 조건이 계속 꼬인거 같고,
코드도 더러워져서 지우고 다시 천천히 조건을 나열해 보았다.
처음엔 l과 r의 인덱스를 둘다 구해 놓고 인덱스로 조건을 만들었는데 그러기 보다는 문자열 포함여부로
조건을 걸고 계산을 하는 것이 더 쉽고 깔끔했다..ㅠ
한시간 동안 헤메고 헤메다가 겨우 풀었던 문제..!
그래도 생각하는 방식이 늘고 있는 것 같아 행복하다!!
아자 아자 화이팅!
728x90
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] - 모의고사 (0) | 2023.12.13 |
---|---|
[프로그래머스] - 치킨 쿠폰 (0) | 2023.12.13 |
[프로그래머스] - ad 제거하기 (0) | 2023.07.12 |
[프로그래머스] - 5명씩 (0) | 2023.07.04 |
[프로그래머스] - 배열 비교하기 (0) | 2023.06.27 |