알고리즘
[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;
};