Bleeding edge

[LeetCode] 2287. Rearrange Characters to Make Target String - 자바스크립트 0610 본문

코딩테스트 공부

[LeetCode] 2287. Rearrange Characters to Make Target String - 자바스크립트 0610

codevil 2022. 6. 10. 13:01

https://leetcode.com/problems/rearrange-characters-to-make-target-string/

 

Rearrange Characters to Make Target String - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제를 잘못이해해서 문제를 두번 풀었다..

1. target에 주어진 알파벳 숫자를 카운트한다

2. s에 주어진 알파벳 숫자를 카운트한다.

const maperMake = (target) => {
    let map = new Map()
    for (let i = 0; i < target.length; i++) {
        if (!map.has(target[i])) {
            map.set(target[i], 1)
        } else {
            map.set(target[i], map.get(target[i]) + 1)
        }
    }   
    return map
}

3. Math.floor(s에 주어진 알파벳 갯수 /target에 있는 알파벳 갯수)시킨다. 

3-1 만일, 3이 없다면 NaN이 나오기 때문에 0이라고 계산한다

4 3과 3-1을 정렬에 넣는다. 

    for (let [element, key] of targetMap) {
        let calc
        if (sMap.has(element)) {
            calc = Math.floor(sMap.get(element) / targetMap.get(element))

        } else {
            calc = 0
        }
        answer.push(calc)
    }

 

처음에 순서가 중요한줄알고 다른식으로 풀이를 했었는데, 순서가 중요한게 아니었다.. ㅠㅠ

전체 풀이

var rearrangeCharacters = function (s, target) {
    const sMap = maperMake(s)
    const targetMap = maperMake(target)
    const answer = []
    console.log(sMap, targetMap)
    for (let [element, key] of targetMap) {
        let calc
        if (sMap.has(element)) {
            calc = Math.floor(sMap.get(element) / targetMap.get(element))

        } else {
            calc = 0
        }
        answer.push(calc)
    }
    return Math.min(...answer)
};
const maperMake = (target) => {
    let map = new Map()
    for (let i = 0; i < target.length; i++) {
        if (!map.has(target[i])) {
            map.set(target[i], 1)
        } else {
            map.set(target[i], map.get(target[i]) + 1)
        }
    }   
    return map
}