[프로그래머스/181871] ad 제거하기
in Study / Coding Test
☑️ 문제
☑️ 풀이
첫 번째 풀이
//시간: 5.42ms
//메모리: 76.1MB
import java.util.*;
class Solution {
public String[] solution(String[] strArr) {
List<String> list = new ArrayList<>();
for (String str : strArr) {
for (int i = 0; i < str.length(); i++) {
if (str.substring(i).startsWith("ad")) {
System.out.println(str.substring(i));
break;
}
if (i == str.length() - 1) {
list.add(str);
}
}
}
String[] answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
- 이중 for문을 돌며
startsWith
메서드를 사용하였다. - 시작 인덱스를 순차적으로 돌며
substring
메서드로 문자열을 잘랐고, 해당 문자열이“ad”
를 가지고 있는 지를 확인하였다. - 이렇게 하니 시간이 오래 걸렸다.
두 번째 풀이
//시간: 0.81ms
//메모리: 87.1MB
import java.util.*;
class Solution {
public String[] solution(String[] strArr) {
List<String> list = new ArrayList<>();
for (String str : strArr) {
if (!str.contains("ad")) {
list.add(str);
}
}
String[] answer = new String[list.size()];
for (int i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
- 다른 풀이를 보고
contains
메서드를 사용하여 다시 풀어보았다. - 해당 문자열에
ad
가 포함되어 있지 않으면list
에 추가되도록 하였다. 이중 for문
을 돌지 않아 시간이 줄어들었다.
☑️ 문법 정리 - contains
String.contains(CharSequence seq)
- String 클래스의
contains()
메서드는특정 문자열(CharSequence)
이 포함되어 있는지 확인한다. - 포함되어 있으면
true
, 아니면false
를 반환한다. - 포함 여부를 검사할 때, 대소문자를 구분한다.
공백도 포함 여부에 영향을 미친다.
예제
String str = "Hello, Java Programming!"; System.out.println(str.contains("Java")); // true System.out.println(str.contains("java")); // false (대소문자 구분) System.out.println(str.contains("Python")); // false System.out.println(str.contains(" ")); // true (공백도 포함 여부 검사)
Collections.contains(Object o)
List
,Set
등의 컬렉션에서 특정 요소가 포함되어 있는 지 확인한다.- 내부동작
ArrayList
→equals()
를 사용하여 요소를 비교한다.HashSet
→ 해시값을 이용하여 빠르게 확인한다.TreeSet
→ 정렬된 트리를 이용하여 탐색한다.
ArrayList
예제List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Cherry"); System.out.println(list.contains("Banana")); // true System.out.println(list.contains("Grapes")); // false
Set
예제Set<Integer> set = new HashSet<>(); set.add(100); set.add(200); set.add(300); System.out.println(set.contains(200)); // true System.out.println(set.contains(500)); // false
Map.containsKey(Object key) & Map.containsValue(Object value)
- Map에서는
contains()
가 아닌containsKey()
또는containsValue()
메서드를 사용하여 키 또는 값을 포함하는지 확인한다. 예제
Map<String, Integer> map = new HashMap<>(); map.put("Alice", 90); map.put("Bob", 85); map.put("Charlie", 95); System.out.println(map.containsKey("Alice"); // true System.out.println(map.containsValue(100); // false