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 반환
- map이 해당 key값을 포함하고 있다면 val을 구함
- 전부 통과 시 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값을 포함하고 있는지 여부 판단
'JAVA > Coding Test Study' 카테고리의 다른 글
[Easy] LeetCode - no.290 Word Pattern : Java (0) | 2024.10.16 |
---|---|
[Easy] LeetCode - no.205 Isomorphic Strings : Java (0) | 2024.10.16 |
[Easy] LeetCode - no.392 Is Subsequence : Java (1) | 2024.10.14 |
[Easy] LeetCode - no.125 Valid Palindrome : Java (0) | 2024.10.13 |
[Easy] LeetCode - no.28 Find the Index of the First Occurrence in a String : Java (0) | 2024.10.13 |