[프로그래머스/181871] ad 제거하기

☑️ 문제

프로그래머스 181871

☑️ 풀이

첫 번째 풀이

//시간: 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 등의 컬렉션에서 특정 요소가 포함되어 있는 지 확인한다.
  • 내부동작
    • ArrayListequals()를 사용하여 요소를 비교한다.
    • 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
    

© 2021. All rights reserved.

yaejinkong의 블로그