문제 설명
문자열
before
와 after
가 매개변수로 주어질 때, before
의 순서를 바꾸어 after
를 만들 수 있으면 1을, 만들 수 없으면 0을 return 하도록 solution 함수를 완성해보세요.제한사항
- 0 <
before
의 길이 ==after
의 길이 < 1,000
before
와after
는 모두 소문자로 이루어져 있습니다.
해답
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String before, String after) {
int answer = 0;
Map<Character, Integer> map = new HashMap<Character, Integer>();
Map<Character, Integer> map2 = new HashMap<Character, Integer>();
for (int i = 0; i < 26; i++) {
map.put((char) (97 + i), 0);
map2.putAll(map);
}
for (int i = 0; i < before.length(); i++) {
char c = before.charAt(i);
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getKey().equals(c)) {
map.put(entry.getKey(), entry.getValue() + 1);
}
}
}
for (int i = 0; i < after.length(); i++) {
char c = after.charAt(i);
for (Map.Entry<Character, Integer> entry : map2.entrySet()) {
if (entry.getKey().equals(c)) {
map2.put(entry.getKey(), entry.getValue() + 1);
}
}
}
if (map.equals(map2)) {
answer = 1;
};
return answer;
}
}
- HashMap을 사용하고 싶어서 해봤는데 많이 복잡해졌습니다.
import java.util.HashMap;
import java.util.Map;
class Solution {
public int solution(String before, String after) {
Map<Character, Integer> charCount = new HashMap<>();
for (char c : before.toCharArray()) {
charCount.put(c, charCount.getOrDefault(c, 0) + 1);
}
for (char c : after.toCharArray()) {
charCount.put(c, charCount.getOrDefault(c, 0) - 1);
}
for (int count : charCount.values()) {
if (count != 0) {
return 0;
}
}
return 1;
}
}
- toCharArray 메서드와 Map 하나만 사용해서 리팩터링 했습니다.
import java.util.Arrays;
class Solution {
public int solution(String before, String after) {
char[] beforeArr = before.toCharArray();
char[] afterArr = after.toCharArray();
Arrays.sort(beforeArr);
Arrays.sort(afterArr);
return Arrays.equals(beforeArr, afterArr) ? 1 : 0;
}
}
- 정렬 후 equal 메서드를 사용하는 방법도 있었습니다.
Share article