[Java 알고리즘 문제] (60) A로 B 만들기

KangHo Lee's avatar
Jan 25, 2025
[Java 알고리즘 문제] (60) A로 B 만들기

문제 설명

문자열 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

devleekangho