
ransomNote와 magazine이 주어지면, magazine의 문자를 사용하여 ransomNote를 구성할 수 있는 경우 true를 반환하고 그렇지 않으면 false를 반환합니다.ransomNote에서 한 번만 사용될 수 있습니다.
magazine의 문자들을 반복문을 통해 map에 저장합니다.map의 key값이 없는 경우 default값을 추가하고, 있을 경우 해당 key의 value값을 +1 하여 중복된 key값을 count합니다.ransomNote의 문자를 조회하는 반복문을 통해 초기화한 map의 key에 있는지, 그리고 해당 key의 value값이 0 이상인지 조건문을 통해 확인합니다.class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
Map<Character, Integer> map = new HashMap();
// magazine 문자 map에 초기화
for(char c : magazine.toCharArray())
map.put(c, map.getOrDefault(c, 0) + 1);
// ransomNote 문자 존재 및 개수 확인
for(char c : ransomNote.toCharArray()){
if(map.containsKey(c) && map.get(c) > 0)
map.put(c, map.get(c) - 1);
else
return false;
}
return true;
}
}
HashMap을 사용하지 않고 정해지 알파벳 26개만큼 배열을 만들어 HashMap과 비슷한 기능을 하게 만들었습니다.
magazine을 문자를 반복문으로 조회하여 배열에 문자 수를 저장합니다. magazine.charAt(i) - 'a'을 하면 배열에 index 0~25을 가리키는 값으로 사용될 수 있습니다.public class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
// 알파벳 수만큼 배열 할당
int[] arr = new int[26];
// 문자열 magazine을 문자로 배열 초기화
for (int i = 0; i < magazine.length(); i++) {
arr[magazine.charAt(i) - 'a']++;
}
// 같은 문자 확인
for (int i = 0; i < ransomNote.length(); i++) {
if(--arr[ransomNote.charAt(i)-'a'] < 0) {
return false;
}
}
return true;
}
}