본문 바로가기

프로그래머스(Java)/Level 0

[프로그래머스] A로 B 만들기

728x90

코드 힌트

  1. 문제 이해:
    • 이 문제에서는 두 문자열 `before`와 `after`가 주어집니다. `before`의 알파벳 순서를 어떻게 바꾸든 `after`가 될 수 있는지 확인하는 것이 목표입니다.
    • 즉, 두 문자열이 서로 다른 순서로 배열된 같은 문자들로 이루어져 있다면, `before`를 어떤 방법으로든 `after`로 변환할 수 있습니다.
  2. 알파벳 개수 세기:
    • 두 문자열이 서로 같은 문자들로 이루어져 있는지 확인하기 위해 각 문자열의 알파벳 개수를 셉니다.
    • before와 after 문자열 각각에 대해, 각 알파벳(a~z)의 개수를 셀 수 있도록 크기 26의 배열을 사용합니다.
  3. 문자 개수 비교하기:
    • 먼저 before 문자열을 순회하면서 각 문자의 개수를 세어 배열에 저장합니다.
    • 그런 다음, after 문자열도 동일하게 처리합니다.
  4. 결과 비교:
    • 두 문자열이 같은 문자들로 이루어져 있다면, 두 개의 배열은 완전히 동일할 것입니다.
    • 배열이 동일하면 1을 반환하고, 그렇지 않으면 0을 반환합니다.

접근 방법

  • 알파벳 매핑: 각 문자를 배열의 인덱스에 매핑하기 위해 'a'를 기준으로 하여 알파벳을 0~25로 매핑합니다. 예를 들어, 'a'는 0, 'b'는 1, 'z'는 25가 됩니다.
  • 배열 활용: 알파벳 개수를 세는 배열을 사용하면, 각 문자열의 알파벳 분포를 쉽게 비교할 수 있습니다. 이 방법은 O(n) 시간 복잡도로 효율적으로 문제를 해결할 수 있습니다.
  • 비교: 두 배열이 동일하다면 두 문자열은 애너그램(같은 문자를 가진 다른 순서의 문자열)입니다. 이 비교는 Arrays.equals() 메서드를 사용하여 간단히 처리할 수 있습니다.
    혹은 for문을 사용하여 확인할 수 있습니다.

 

 


정답은 더보기 클릭

더보기
import java.util.*;

class Solution {
    public int solution(String before, String after) {
        // 알파벳 개수를 셀 배열 초기화 (a-z까지 26개)
        int[] beforeCount = new int[26];
        int[] afterCount = new int[26];
        
        // before 문자열의 각 문자를 순회하며 알파벳 개수를 증가시킴
        for (char c : before.toCharArray()) {
            beforeCount[c - 'a']++;  // 'a'를 빼서 알파벳을 0~25 범위로 매핑
        } 
        
        // after 문자열의 각 문자를 순회하며 알파벳 개수를 증가시킴
        for (char c : after.toCharArray()) {
            afterCount[c - 'a']++;  // 동일하게 'a'를 빼서 0~25 범위로 매핑
        }
        
        // 두 배열이 같은지 비교하여 같으면 1을, 다르면 0을 반환
        if (Arrays.equals(beforeCount, afterCount))
            return 1;
        return 0;
    }
}
728x90