Skip to content

Commit 464a84a

Browse files
committed
solve : DaleStudy#218 (Valid Anagram), DaleStudy#230 (Climbing Stairs) with Java
1 parent 324485e commit 464a84a

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

climbing-stairs/kdh-92.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public int climbStairs(int n) {
3+
// dp 응용 버전
4+
// 시간복잡도 : O(N), 공간복잡도 : O(1)
5+
6+
int prev = 1, curr = 1;
7+
8+
if (n == 1) return prev;
9+
10+
for (int i = 2; i < n; i++) {
11+
int now = curr + prev;
12+
prev = curr;
13+
curr = now;
14+
}
15+
16+
return curr;
17+
}
18+
}

valid-anagram/kdh-92.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* 특이사항
3+
* 시간복잡도가 (1)번 풀이는 O(N log N) / (2), (3)번 풀이는 O(N)인데
4+
* 리트코드에서 Runtime - (1)번 : 3ms, (3)번 : 6ms, (2)번 : 13ms
5+
*
6+
* 시간복잡도로만 따지면 당연히 (2), (3)번 풀이가 빨라야하는데도 불구하고 오히려 (1)번 풀이가 더 빠른 결과가 나온다.
7+
* chatgpt 확인했을 때 가장 큰 차이점은 문자열을 배열로 변경해서 정렬을 하는데 이 때 정렬 알고리즘의 성능에 따라 차이가 난다는 내용이 있었다.
8+
* N이 높아질수록 (2), (3)의 성능이 좋아질 것으로 예상되나 해당 문제의 결과에서는 (1)의 성능이 좋게 나올 수 있다는 것을 알게 되었다.
9+
*/
10+
11+
class Solution {
12+
public boolean isAnagram(String s, String t) {
13+
// (1) 문자 배열 - 정렬 & 비교
14+
// 시간복잡도 : O(N log N), 공간복잡도 : O(N)
15+
16+
// char[] sArr = s.toCharArray();
17+
// char[] tArr = t.toCharArray();
18+
// Arrays.sort(sArr);
19+
// Arrays.sort(tArr);
20+
21+
// return new String(sArr).equals(new String(tArr)); // 문자열을 비교한다 생각했을 때 방법
22+
// return Arrays.equals(sArr, tArr); // char 배열 자체를 비교
23+
24+
// (2) HashMap 이용해 알파벳 개수 체크
25+
// 시간복잡도 : O(N), 공간복잡도 : O(N)
26+
27+
// Map<Character, Integer> count = new HashMap<>();
28+
29+
// for (char x : s.toCharArray()) {
30+
// count.put(x, count.getOrDefault(x, 0) + 1);
31+
// }
32+
33+
// for (char x : t.toCharArray()) {
34+
// count.put(x, count.getOrDefault(x, 0) - 1);
35+
// }
36+
37+
// for (int val : count.values()) {
38+
// if (val != 0) {
39+
// return false;
40+
// }
41+
// }
42+
43+
// return true;
44+
45+
// (3) 배열로 알파벳 개수 체크
46+
// 시간복잡도 : O(N), 공간복잡도 : O(N)
47+
48+
// if (s.length() != t.length()) {
49+
// return false;
50+
// }
51+
52+
// int[] freq = new int[26];
53+
// for (int i = 0; i < s.length(); i++) {
54+
// freq[s.charAt(i) - 'a']++;
55+
// freq[t.charAt(i) - 'a']--;
56+
// }
57+
58+
// for (int i = 0; i < freq.length; i++) {
59+
// if (freq[i] != 0) {
60+
// return false;
61+
// }
62+
// }
63+
64+
// return true;
65+
}
66+
}

0 commit comments

Comments
 (0)