Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions valid-anagram/dahyeong-yun.java

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🏷️ 알고리즘 패턴 분석

  • 패턴: Binary Search, Hash Map / Hash Set, Greedy, Divide and Conquer, Dynamic Programming, Two Pointers, Sliding Window, Fast & Slow Pointers, BFS, DFS, Backtracking, Union Find, Trie, Bit Manipulation, Monotonic Stack, Heap / Priority Queue
  • 설명: 주어진 코드는 두 문자열을 정렬한 뒤 비교하여 애너그램 여부를 판단한다. 정렬을 이용한 비교로 O(n log n) 시간복잡도와 O(n) 추가 공간을 활용하므로 패턴은 정렬 기반 비교에 해당하며, 직접적인 해시/카운트나 투포인터 대신 정렬 중심의 방법으로 분류된다.

📊 시간/공간 복잡도 분석

유저 분석 실제 분석 결과
Time O(n log n) O(n log n)
Space O(n) O(n)

피드백: 두 문자열을 각각 정렬한 뒤 비교하므로 시간 복잡도는 정렬 비용에 의해 지배되고, 추가적인 O(n) 공간이 필요하다.

개선 제안: 현재 구현이 적절해 보입니다.

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* 0. 풀이 개요
* - 시간복잡도 : O(n log n)
* - 공간복잡도 : O(n)
*/
class Solution {
/**
* 1. 풀이 과정
* 1.1 문제 이해
* - 애니어그램이 가능한 문자열인지 판단하는 문제임. 두 문자열 s와 t가 주어지고, t가 s의 애니어그램이라면 true를 반환
* 1.2 제약 사항
* - s, 와 t의 문자열의 길이가 5 * 10^4 이므로 문자열 길이 만큼 순회해야 한다면 O(n^2)은 불가능해 보임. O(n log n) 이하가 필요.
* - 문자는 반드시 영소문자로만 구성되어 있으나, 만약 Follow up 질문 처럼 유니코드를 포함해야 된다면 이를 포괄하는 자료형이 필요.
* 1.3 풀이 아이디어
* - 문자열을 정렬했을 때, 같은 문자열이라면 애니어그램이 될 것.
* - 문자열의 character를 배열로 만들고 정렬하면, bulit-in 메서드에 의해 O(n log n)의 시간복잡도가 가짐,
* - 문자열의 길이만큼 character 배열이 필요하므로 2n 만큼의 공간이 더 필요하므로 O(n)의 공간복잡도를 가짐.
*/
public boolean isAnagram(String s, String t) {
char[] arrayS = s.toCharArray();
char[] arrayT = t.toCharArray();

Arrays.sort(arrayS);
Arrays.sort(arrayT);

return Arrays.equals(arrayS, arrayT);
}
}
Loading