728x90
코드 힌트
- 문제 이해:
- 이 문제에서는 두 문자열 `before`와 `after`가 주어집니다. `before`의 알파벳 순서를 어떻게 바꾸든 `after`가 될 수 있는지 확인하는 것이 목표입니다.
- 즉, 두 문자열이 서로 다른 순서로 배열된 같은 문자들로 이루어져 있다면, `before`를 어떤 방법으로든 `after`로 변환할 수 있습니다.
- 이 문제에서는 두 문자열 `before`와 `after`가 주어집니다. `before`의 알파벳 순서를 어떻게 바꾸든 `after`가 될 수 있는지 확인하는 것이 목표입니다.
- 알파벳 개수 세기:
- 두 문자열이 서로 같은 문자들로 이루어져 있는지 확인하기 위해 각 문자열의 알파벳 개수를 셉니다.
- before와 after 문자열 각각에 대해, 각 알파벳(a~z)의 개수를 셀 수 있도록 크기 26의 배열을 사용합니다.
- 문자 개수 비교하기:
- 먼저 before 문자열을 순회하면서 각 문자의 개수를 세어 배열에 저장합니다.
- 그런 다음, after 문자열도 동일하게 처리합니다.
- 결과 비교:
- 두 문자열이 같은 문자들로 이루어져 있다면, 두 개의 배열은 완전히 동일할 것입니다.
- 배열이 동일하면 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
'프로그래머스(Java) > Level 0' 카테고리의 다른 글
[프로그래머스] 컨트롤 제트 (0) | 2024.08.14 |
---|---|
[프로그래머스] 한 번만 등장한 문자 (0) | 2024.08.14 |
[프로그래머스] 숨어있는 숫자의 덧셈 (2) (0) | 2024.08.14 |
[프로그래머스] 팩토리얼 (0) | 2024.08.14 |
[프로그래머스] 모스부호 (1) (0) | 2024.08.14 |