본문 바로가기
JAVA/Coding Test Study

[Easy] LeetCode - no.383 Ransom Note : Java

by ♡˖GYURI˖♡ 2024. 10. 14.
728x90

https://leetcode.com/problems/ransom-note/description/?envType=study-plan-v2&envId=top-interview-150

 

 

문제

magazine의 알파벳들로 ransomNote를 만들 수 있는지 여부를 판단하여 true 또는 false를 반환할 것

이 때 magazine의 알파벳은 각각 한 번만 사용 가능

Example 2:
Input: ransomNote = "aa", magazine = "ab"
Output: false

Example 3:
Input: ransomNote = "aa", magazine = "aab"
Output: true

 

 

 

풀이

import java.util.*;

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        Map<Character, Integer> map = new HashMap<>();

        for (char c : magazine.toCharArray()) {
            map.put(c, map.getOrDefault(c, 0) + 1);
        }

        for (char c : ransomNote.toCharArray()) {
            if (map.containsKey(c)) {
                int val = map.get(c);
                if (val > 1) {
                    map.put(c, map.get(c) - 1);
                } else {
                    map.remove(c);
                }
            } else {
                return false;
            }
        }

        return true;
    }
}
  • HashMap 사용
  • map에 magazine의 Character들을 개수대로 put()
  • ransomNote.toCharArray()를 순회
    • map이 해당 key값을 포함하고 있다면 val을 구함
      • 만약 val이 1보다 크다면 val을 하나 뺀 값을 다시 map에 put()
      • 만약 val이 1 이하라면 map에서 remove()
    • map이 해당 key값을 포함하고 있지 않다면 바로 false 반환
  • 전부 통과 시 true 반환

 

 

풀이 2 (위 풀이를 조금 다듬은 것에 불과)

  public static boolean canConstruct2(String ransomNote, String magazine) {
    Map<Character, Integer> map = new HashMap<>();

    for (char c : magazine.toCharArray()) {
      map.put(c, map.getOrDefault(c, 0) + 1);
    }

    for (char c : ransomNote.toCharArray()) {
      if (!map.containsKey(c) || map.get(c) <= 0) {
        return false;
      }
      map.put(c, map.get(c) - 1);
    }

    return true;
  }

 

 

 

⭐map.containsKey() : map이 해당 key값을 포함하고 있는지 여부 판단