관리 메뉴

FU11M00N

[LeetCode] Ransom Note - Javascript 본문

알고리즘

[LeetCode] Ransom Note - Javascript

호IT 2023. 9. 1. 01:43

Ransom Note

[magazine에 ransomNote의 모든 단어 포함 여부 확인]

 

제약 조건 

1 <= ransomNote.length, magazine.length <= 10^5
ransomNote and magazine consist of lowercase English letters.

 

Example

ex1) Input: ransomNote = "a", magazine = "b"
     Output: false

ex2) Input: ransomNote = "aa", magazine = "ab"
     Output: false

ex3) Input: ransomNote = "aa", magazine = "aab"
     Output: true

문제 접근 방식

해시테이블 성격을 이용했다.
먼저 obj 빈 객체 변수를 생성하고
반복문을 수행해 magazine의 문자의 개수를 obj 객체에 저장한다.

ex) magazine = "babba" , ransomNote = "aabbb"

obj : { b:3, a:2 } 

그 후 ransomNote 데이터를 반복문을 돌며 obj 객체에 해당 데이터가 없으면 false를 리턴하고 아니라면 값을 하나씩 뺀다.
아래의 예시처럼 말이다. 만약 a가 0인 상태에서 a의 데이터가 한 번 더 들어오면 false를 리턴하고 모두 통과하면 true를 리턴한다.

ex) obj: {b:3, a:2} -> {b:3, a:1} -> {b:3, a:1} -> {b:3, a:0} -> {b:2, a:0} ...

 전체코드

/**
 * @param {string} ransomNote
 * @param {string} magazine
 * @return {boolean}
 */
var canConstruct = function(ransomNote, magazine) {
    const obj = {};
    for(let data of magazine) {
        if (!obj[data]) {
            obj[data] = 0;
        }
        obj[data]++;
    }
      
    for(let data of ransomNote) {
        if(!obj[data]) {
            return false;
        } 
        obj[data]--;
    }
    return true;
};

 

 

Comments