코딩테스트연습/[프로그래머스] Java

[프로그래머스] Java 코딩테스트 연습 - ad 제거하기

_꼬마돌 2023. 6. 24. 14:41
반응형

[프로그래머스] Java 코딩테스트 연습 - ad 제거하기

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/181870

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

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

 

풀이

문제를 잘못 이해하고 문자열에서 "ad" 만 삭제해서 틀려버린 답,, 

class Solution {
    public String[] solution(String[] strArr) {
        String[] answer = new String[strArr.length];
        
        for (int i = 0; i < strArr.length; i++) {
               answer[i] = strArr[i].replaceAll("ad", "");
        }
        
        return answer;
    }
}

테스트 1
입력값 〉	["and", "notad", "abcd"]
기댓값 〉	["and", "abcd"]
실행 결과 〉	실행한 결괏값 ["and","not","abcd"]이 기댓값 ["and","abcd"]과 다릅니다.

테스트 2
입력값 〉	["there", "is", "not", "a", "d"]
기댓값 〉	["there", "is", "not", "a", "d"]
실행 결과 〉	테스트를 통과하였습니다.

"ad"가 포함된 모든 문자열을 삭제하면 배열의 크기가 바뀌게 되는데, 그 크기를 알 수 없어서 List를 사용했다. List가 크기 조정에 유연하기 때문이다. 
for문으로 각 문자열을 순회하며 "ad"를 포함하고 있지 않은 문자열들을 add() 메서드로 answer에 저장했다.
answer를 List에서 다시 배열로 변환한 뒤 return.
for (String str : strArr)

↕ 같은 의미

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

 

소스코드

import java.util.List;
import java.util.ArrayList;

class Solution {
    public String[] solution(String[] strArr) {
        List<String> answer = new ArrayList<>();
        
        for (String str : strArr) {
            if (!str.contains("ad")) {
                answer.add(str);
            }
        }
        return answer.toArray(new String[0]);
    }
}

 

반응형