일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Data Structure
- BFS
- 안드로이드
- Redux
- CS
- 동적 계획법
- VIM
- DFS
- 프로그래머스
- java
- Graph
- 자바
- vscode
- 다이나믹 프로그래밍
- Algorithm
- TypeScript
- 리트코드
- DP
- LeetCode
- db
- Javascript
- react
- Python
- 그레이들
- 알고리즘
- 백준
- Database
- network
- git
- frontend
- Today
- Total
늘 겸손하게
Leetcode Q : Valid Anagram 본문
February LeetCoding Challenge 2021 ( Week 2, day 11 )
Q : Valid Anagram
문제 해설
문자열 s와 t 가 주어질 때, t 가 s의 anagram 인지 판별하는 함수를 작성하라
anagram : 문자 배치를 바꾸면 같아지는 문자열
ex)
- listen 은 silent의 anagram ( listen의 문자 배치를 바꾸면 silent로 만들 수 있으므로)
- nagaram 은 anagram의 anagram ( nagaram의 문자 배치를 바꾸면 anagram로 만들 수 있으므로)
문제 풀이
1. 문자열 s와 t 들의 문자들을 오름차순으로 정렬
2. 정렬한 문자열 s와 t가 같은 지 판별
3. 같다면 return true
4. 다르다면 return false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length() ) {
return false;
}
char [] s_arr = s.toCharArray();
char [] t_arr = t.toCharArray();
Arrays.sort(s_arr);
Arrays.sort(t_arr);
s = new String(s_arr);
t = new String(t_arr);
if(s.equals(t)) {
return true;
}
return false;
}
}
|
cs |
코드 설명
String 클래스의 메서드(method)인 toCharArray()를 이용하여
char형 배열에 문자열 반환한 뒤
char형 배열을 정렬
정렬된 문자열을 String 클래스 s 와 t 에 재할당
String 클래스의 매소드인 equals(Object object)를 이용해 s 와 t 가 같은 지 판별
결과
Runtime : 2 ms , Your runtime beats 95.86% of java submissions
Memory Usage : 39.1 MB , Your memory usage beats 74.77% of java submissions.
준수한 성능을 보인다.
더 좋은 코드
원리는 똑같지만 더 좋은 코드가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length() != t.length() ) {
return false;
}
char [] s_arr = s.toCharArray();
char [] t_arr = t.toCharArray();
Arrays.sort(s_arr);
Arrays.sort(t_arr);
return Arrays.equals(s_arr,t_arr);
}
}
|
cs |
새로운 문자열을 만들 필요 없이 util.Arrays의 메소드를 이용하여 정렬한 문자열 2개를 비교하는 것
그럼 메모리 사용량이 0.1 MB 줄어 메모리 사용량에서 91.37%의 코드들을 이긴다.
최상위 메모리 사용량이 38.5 MB 감안하면 거기서 거기이지만.. 순위가 약 17% 올라간다!
결론
최대한 간단하게 풀자
hashMap을 이용해서 각 문자가 문자열에 몇 개 존재하는지 저장한 뒤, hashMap끼리 비교하는 방법으로 풀려고 해 봤지만 굳이 복잡하게 할 필요가 없다는 것을 깨달았다.( Simple is the best )
'코딩 문제 > LeetCode' 카테고리의 다른 글
LeetCode Q - Maximum 69 Number (Java) (0) | 2021.02.21 |
---|---|
LeetCode Q - Container With Most Water (Java) (0) | 2021.02.19 |
Leetcode Q : Letter Case Permutation (Java) (0) | 2021.02.17 |
Leetcode Q : The K Weakest Rows in a Matrix (0) | 2021.02.16 |
Leetcode Q : Number of Steps to Reduce a Number to Zero (0) | 2021.02.13 |