[LeetCode] 383. Ransom Note

lkdcode·2023년 8월 31일

Algorithm

목록 보기
23/47
post-thumbnail

383. Ransom Note


문제 분석

두 개의 문자열이 주어진다.
String ransomNote, String magazine

String magazine 의 문자를 가지고서 String ransomNote 를 만들 수 있다면
true 아니면 false 를 리턴하는 문제


풀이 과정

HashMap 을 하나 선언한다.

String ransomNotecharAt() 을 통해 HashMap 에 추가한다.
이때 keyCharacter 가 되고 valuegetOrDefault() 를 통해 0 또는 +1 해준다.

String magazinecharAt() 을 통해 HashMap 에 추가한다.
이때 keyCharacter 가 되고 valuegetOrDefault() 를 통해 0 또는 -1 해준다.

반복문을 통해 value 를 꺼내고 해당 value 가 0보다 크다면
String magazine 를 통해 만들 수 없는 단어라는 뜻. 즉, false 를 리턴한다.

해당 반복문에서 조건문에 걸리지 않는다면 true 를 리턴한다.


나의 생각

getOrDefault() 를 통하면 map 반복문을 도는 로직이기 때문에 시간 복잡도의 효율을 저하하는 것 같다.
아직은 떠오르지 않지만 좀 더 나은 방법을 강구해 봐야겠다..


코드

        public boolean canConstruct(String ransomNote, String magazine) {
        Map<Character, Integer> map = new HashMap<>();
        if (ransomNote.length() > magazine.length()) return false;

        for (int i = 0; i < ransomNote.length(); i++) {
            char word = ransomNote.charAt(i);
            map.put(word, map.getOrDefault(word, 0) + 1);
        }

        for (int i = 0; i < magazine.length(); i++) {
            char word = magazine.charAt(i);
            if (map.containsKey(word)) {
                map.put(word, map.getOrDefault(word, 0) - 1);
            }
        }

        for (Integer value : map.values()) {
            if (value > 0) return false;
        }

        return true;
    }

profile
되면 한다

0개의 댓글