자바스크립트 코딩테스트 강좌, 사전 찾기

문제 설명

주어진 문자열 s와 문자열 배열 dictionary가 있다. 문자열 s에서
단어를 공백으로 나눈 후, 이 단어들이 dictionary에 존재하는 단어인지 확인해야 한다.
만약 s의 모든 단어들이 dictionary에 존재한다면 true를 반환하고, 그렇지
않다면 false를 반환하시오.

예제

예제 1

입력: s = “사과 바나나”, dictionary = [“사과”, “고구마”, “바나나”]
출력: true

예제 2

입력: s = “오렌지 포도”, dictionary = [“사과”, “바나나”]
출력: false

문제 풀이

이 문제를 해결하기 위해서는 다음의 과정이 필요합니다:

  1. 문자열 s를 공백 기준으로 나누어 단어 리스트를 생성합니다.
  2. 단어 리스트의 모든 단어가 dictionary에 포함되어 있는지 확인합니다.
  3. 모든 단어가 포함되어 있는 경우 true를 반환하고, 하나라도 포함되어 있지 않은 경우
    false를 반환합니다.

구현

이러한 논리를 바탕으로 자바스크립트 코드를 작성해 보겠습니다:


function isAllWordsInDictionary(s, dictionary) {
    const words = s.split(" "); // 공백으로 단어 분리
    const dictionarySet = new Set(dictionary); // Set으로 변환하여 검색 최적화

    for (const word of words) {
        if (!dictionarySet.has(word)) { // 각 단어가 사전에 있는지 확인
            return false; // 하나라도 없다면 false 반환
        }
    }
    return true; // 모든 단어가 있으면 true 반환
}

// 예제 테스트
console.log(isAllWordsInDictionary("사과 바나나", ["사과", "고구마", "바나나"])); // true
console.log(isAllWordsInDictionary("오렌지 포도", ["사과", "바나나"])); // false
    

코드 설명

위의 코드에서 우리는 수행하는 과정은 다음과 같습니다:

  • s.split(" "): 주어진 문자열 s를 공백을 기준으로 나누어서 단어 리스트를 만듭니다.
  • new Set(dictionary): 주어진 dictionary 배열을 Set으로 변환하여 중복을 제거하고,
    검색 시간을 O(1)로 최적화합니다.
  • for루프를 사용하여 각 단어가 dictionarySet에 존재하는지를 확인합니다.
  • 단어가 존재하지 않으면 false를 반환하고, 모든 단어가 존재하면 true를 반환합니다.

시간 복잡도

이 알고리즘의 시간 복잡도는 O(n + m)입니다. 여기서 n은 문자열 s의 단어 수,
mdictionary의 단어 수입니다. Set을 사용하는 이유는 검색 속도를 빠르게 하여
전체적인 성능 개선을 꾀하기 위함입니다.

결론

이번 문제를 통해 문자열과 배열을 효과적으로 활용하여 주어진 조건을 충족하는지 검증하는 방법을
익혔습니다. 알고리즘 문제를 해결할 때는 항상 문제를 단계별로 나누어 접근하면 보다 쉽게 해결할 수
있습니다. 이와 같은 문제는 다른 상황에서도 유용하게 활용될 수 있습니다.