A로 B 만들기 문제풀이
두개의 문자열이 주어질 때, 문자열의 순서를 바꿨을 때 문자열이 같아진다면 1을 반환 아니라면 0 반환
>map으로 각 문자들을 key값으로 문자의개수를 value값으로 저장하고 다른 문자열과 같은지 비교
public int solution(String before, String after) {
Map<Character,Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < before.length(); i++) {
map.put(before.charAt(i), map.getOrDefault(before.charAt(i), 0)+1);
}
for (int i = 0; i < after.length(); i++) {
if(!(map.containsKey(after.charAt(i)))||map.size()==0) {
return 0;
}
if(map.get(after.charAt(i))==1) {
map.remove(after.charAt(i));
}else {
map.put(after.charAt(i), map.get(after.charAt(i))-1);
}
}
return 1;
}
map에넣은 데이터를 after의 char들을 키 값으로 remove하면서 비교하였다.
>map을 before의 map, after의 map 2개를 만들어서 .equals 함수로 같은지 비교하는게 더 편하다.
public int solution(String before, String after) {
Map<Character,Integer> map = new HashMap<Character, Integer>();
Map<Character,Integer> map2 = new HashMap<Character, Integer>();
for (int i = 0; i < before.length(); i++) {
map.put(before.charAt(i), map.getOrDefault(before.charAt(i), 0)+1);
}
for (int i = 0; i < after.length(); i++) {
map2.put(after.charAt(i), map2.getOrDefault(after.charAt(i), 0)+1);
}
if(map.equals(map2))
return 1;
else return 0;
}
다른사람의 풀이 중 생각지 못한 방법을 발견했다.
> 두 문자열을 정렬하여 같은지 비교하면 된다.
public int solution3(String before, String after) {
char[] arr = before.toCharArray();
char[] arr2 = after.toCharArray();
Arrays.sort(arr);
Arrays.sort(arr2);
if(arr.equals(arr2))return 1;
return 0;
}