알고리즘/Java 알고리즘

String.equals와 HashSet contains의 시간복잡도 비교 (프로그래머스 전화번호 목록)

지니어스팍 2023. 12. 27. 11:02
728x90
728x90

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

 

프로그래머스

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

programmers.co.kr

import java.util.HashSet;
class Solution {

    public HashSet<String> set = new HashSet<>();
    public boolean solution(String[] phone_book) {
        
        boolean answer = true;
        for(String number : phone_book){
            set.add(number);
        }
        for(int i=0;i<phone_book.length;i++){
            for(int j=1;j<phone_book[i].length();j++){
                if(set.contains(phone_book[i].substring(0,j))) return false;
            }

        }
        
            
        return true;
    }
}

 

 

equals 로 String 비교하는것 보다 set으로 contains 여부를 확인하는게 더 시간복잡도가 낮다
어쩌면 당연하게도 String.equals는 각 byte 혹은 char 단위로 비교를 하고 있었다.
즉, 시간 복잡도는 O(1)이 아니라 문자열 길이에 따라 다른 O(N)에 해당한다.
그에비해 Hashset에서 contains는 O(1)에 해당된다.

 

String.equals HashSet (contains) ArrayList (contains) LinkedList (contains)
O(N) O(1) O(N) O(N)

 

 

728x90
728x90