프로그래머스

프로그래머스,자바)ad제거하기

Jr.고래 2024. 4. 17. 20:03

문제)

문자열 배열 strArr가 주어집니다. 배열 내의 문자열 중 "ad"라는 부분 문자열을 포함하고 있는 
모든 문자열을 제거하고 남은 문자열을 순서를 유지하여 배열로 return 하는 solution 함수를 완성해 주세요.

 

제한사항)

1 ≤ strArr의 길이 ≤ 1,000
1 ≤ strArr의 원소의 길이 ≤ 20
strArr의 원소는 알파벳 소문자로 이루어진 문자열입니다.

 

입출력 예)

strArr result
["and","notad","abcd"] ["and","abcd"]
["there","are","no","a","ds"] ["there","are","no","a","ds"]

 

정답)

class Solution {
    public String[] solution(String[] strArr) {
        
        StringBuffer sb = new StringBuffer();
        
        for(String str : strArr){
            if(str.contains("ad")){
                
            }else{
                sb.append(str+" ");
            }
        }
        
        String[] answer = (sb.toString()).split(" ");
        return answer;
    }
}

 

해설)

솔직히 문제는 어렵지 않았다. 제한사항이 없어도 풀 수 있었고, 그러나 문제는 for문을 2번 돌리는 풀이를 할것이냐 더 효율적인 방법으로 할 것이냐? 이 고민을 하는데 오래 걸렸던것 같다.

일반적인 방식으로 for문을 2번 돌려야 하는 이유는 배열의 크기를 정하기 위해서이다. 

그러나 for문 2번 돌려서 푸는건 아무나 다 할 수있을거 같아서 다른 방식으로 풀었다. 

 

for 문을 돌면서 StringBuffer 객체의 메서드를 이용해서 문자열을 집어 넣는다. 

그리고 StringBuffer를 String으로 변환한 뒤 미리 " " 로 구분해둔 것을 split을 활용해서 배열 참조변수에 넘겨준다.