Skip to content

Commit b1ba303

Browse files
authored
Merge pull request #2051 from haxr369/main
[haxr369] WEEK 02 Solutions
2 parents c454857 + 7c5c31b commit b1ba303

File tree

5 files changed

+425
-0
lines changed

5 files changed

+425
-0
lines changed

โ€Ž3sum/haxr369.javaโ€Ž

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Set;
6+
7+
/**
8+
* ์„ธ ์ˆ˜์˜ ์ธ๋ฑ์Šค๊ฐ€ ๋ชจ๋‘ ๋‹ค๋ฅด๊ณ  ์„ธ ์ˆ˜ ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ
9+
* ์„ธ ์ˆซ์ž๊ฐ€ ๋“ค์–ด๊ฐ„ ๋ฐฐ์—ด์€ ์ค‘๋ณต๋˜๊ฒŒ ํ•˜์ง€ ์•Š์€๋‹ค.
10+
*
11+
* 1. ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค. => O(N^3)
12+
* 3000*3000*3000 == 9*10^9 => 9์–ต๊ฑด...
13+
* 2. left, mid, right๋ผ๊ณ  ํ•  ๋•Œ, mid๋ฅผ ๊ณ ์ •ํ•˜๊ณ  left, right๋งŒ ์›€์ง์ด๋Š” two pointer๋ฅผ ์‘์šฉํ•˜๊ธฐ
14+
*/
15+
class Solution {
16+
/**
17+
* Runtime: 545 ms (Beats 14.44%)
18+
* Memory: 60.78 MB (Beats 5.38%)
19+
* Space Complexity: O(N)
20+
* - ์ •๋ ฌ์„ ์œ„ํ•œ ๊ณต๊ฐ„ => O(N)
21+
* - ์„ธ ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋ฆฌ์ŠคํŠธ => O(3)
22+
* > O(N) + O(3) => O(N)
23+
* Time Complexity: O(NlogN)
24+
* - ์ •๋ ฌ์„ ์œ„ํ•œ ์‹œ๊ฐ„ => O(NlogN)
25+
* - mid์˜ ์ˆœํšŒ => O(N)
26+
* - two pointer ์กฐํšŒ => O(N)
27+
* > O(NlogN) + O(N)*O(N) ~= O(N^2)
28+
*/
29+
public List<List<Integer>> threeSum(int[] nums) {
30+
int L = nums.length;
31+
Arrays.sort(nums);
32+
33+
Set<List<Integer>> st = new HashSet<>();
34+
35+
// mid๋ฅผ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ํˆฌ ํฌ์ธํ„ฐ ์ง„ํ–‰
36+
for (int mid = 1; mid < L - 1; mid++) {
37+
int left = 0;
38+
int right = L - 1;
39+
while (left < mid && mid < right) {
40+
int sm = nums[left] + nums[mid] + nums[right];
41+
if (sm == 0) {
42+
/**
43+
* left๋ฅผ ๋”ํ•˜๋Š” ์ด์œ :
44+
* ํ˜„์žฌ ์ฐพ์€ ๊ฒฝ์šฐ์˜ ์ˆ˜ ์™ธ์— ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ์Œ
45+
* ex) -7,1,6 / -6,1,5
46+
* => mid๋Š” ๊ณ ์ •์ด์ง€๋งŒ, left๋Š” ๋Š˜๋ฆฌ๊ณ  right๋ฅผ ์ค„์—ฌ์„œ 0์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Œ
47+
*/
48+
List<Integer> li = new ArrayList<>();
49+
li.add(nums[left]);
50+
li.add(nums[mid]);
51+
li.add(nums[right]);
52+
st.add(li); // ์ค‘๋ณต๊ฐ’์ด ์žˆ์–ด๋„ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ์Œ.
53+
left++;
54+
} else if (sm < 0) { // ๋ถ€์กฑํ•˜๋ฉด left ๋Š˜๋ฆฌ๊ธฐ
55+
left++;
56+
} else { // ๊ณผํ•˜๋ฉด right ์ค„์ด๊ธฐ
57+
right--;
58+
}
59+
}
60+
}
61+
62+
return new ArrayList<>(st);
63+
}
64+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
/**
3+
* ๊ณ„์‚ฐ n๊ฐœ๋ฅผ ์˜ค๋ฅด๊ธฐ ์œ„ํ•ด 1 ๋˜๋Š” 2๊ฐœ์”ฉ ์˜ค๋ฅด๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ธฐ
4+
*
5+
* DP๋ฌธ์ œ ํ’€์ด ๊ณผ์ •
6+
* 1. ๋ฌธ์ œ ๋‹จ์ˆœํ™”
7+
* - ์ˆซ์ž N์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด 1 ๋˜๋Š” 2๋ฅผ ๋”ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
8+
* 2. ๋ฌธ์ œ์—์„œ ์›ํ•˜๋Š” ๊ฒƒ
9+
* - N์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜
10+
* => DP[N] = N์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜
11+
* 2. ๊ทœ์น™ ์ฐพ๊ธฐ
12+
* - N์€ N-1์—์„œ 1 ๋”ํ•˜๊ฑฐ๋‚˜, N-2์—์„œ 2๋ฅผ ๋”ํ•˜๋ฉด ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
13+
* - ๋”ฐ๋ผ์„œ N์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋Š” N-1์„ ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜ + N-2์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜
14+
* - DP[0] = 1 => ์›€์ง์ด์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
15+
* - DP[1] = 1 => 1์นธ ์›€์ง์ด๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜
16+
* - DP[N] = DP[N-2] + DP[N-1]
17+
*/
18+
public int climbStairs(int n) {
19+
/**
20+
* Runtime: 0 ms (Beats 100.00%)
21+
* Memory: 42.00 MB (Beats 15.00%)
22+
* Space Complexity: O(N)
23+
* - N ํฌ๊ธฐ์˜ ๋ฐฐ์—ด 1๊ฐœ ์‚ฌ์šฉ์œผ๋กœ O(N)
24+
* > O(N)
25+
* Time Complexity: O(N)
26+
* - NํšŒ ๋ง์…ˆ์œผ๋กœ => O(N)
27+
* > O(N)
28+
*/
29+
int[] dp = new int[n + 1];
30+
dp[0] = 1;
31+
dp[1] = 1;
32+
33+
for (int i = 2; i < n + 1; i++) {
34+
dp[i] = dp[i - 1] + dp[i - 2];
35+
}
36+
return dp[n];
37+
}
38+
}
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
/**
5+
*
6+
* ๋งˆ์ง€๋ง‰ ํ’€์ด๊ฐ€ ์ตœ์ข…ํ’€์ด๊ณ  ์ ์ฐจ ๋ณต์žก๋„๊ฐ€ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.
7+
*
8+
* 1๋ฒˆ์งธ ํ’€์ด: ์ƒˆ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ๋ฅผ ์‘์šฉํ•œ ๋ฒ”์œ„ ๊ณฑ ๊ฒŒ์‚ฐ ๊ตฌํ˜„
9+
* 2๋ฒˆ์งธ ํ’€์ด: ๊ธฐ๋ณธ์ ์ธ prefix, suffix product ๊ตฌํ˜„
10+
* 3๋ฒˆ์งธ ํ’€์ด: ์ตœ์ข… ํ’€์ด๋กœ prefix, suffix product์˜ ๊ณต๊ฐ„๋ณต์žก๋„๋ฅผ O(1)๋กœ ์ตœ์ ํ™”
11+
*
12+
*/
13+
class Solution {
14+
15+
/**
16+
* ํ’€์ด์š”์•ฝ: ๋ฒ”์œ„๋ฅผ ๋ฐ˜์”ฉ ๋‚˜๋ˆ„๋ฉฐ ๊ณฑ์„ ์บ์‹ฑํ•˜๊ณ , ์ œ์™ธํ•  ์ธ๋ฑ์Šค๋งŒ ๊ณจ๋ผ ํƒ์ƒ‰ํ•˜๋Š” ๋ถ„ํ•  ์ •๋ณต ๊ธฐ๋ฐ˜ ๋ฐฐํƒ€ ๊ณฑ ๊ณ„์‚ฐ
17+
*
18+
* ํ’€์ด๊ฒฐ๊ณผ:
19+
* Runtime: 872 ms (Beats 3.62%)
20+
* Memory: 137.29 MB (Beats 5.61%)
21+
* Space Complexity: O(NlogN)
22+
* - ๊ธธ์ด N์ธ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์”ฉ ์ž๋ฅธ ๋ฒ”์œ„ ์•ˆ์— ์ˆ˜๋“ค์„ ๊ณฑํ•œ ๊ฐ’์„ ์ €์žฅ O(NlogN)
23+
* - ๊ธธ์ด N์ธ ์ถœ๋ ฅ ๋ฐฐ์—ด ์ƒ์„ฑ O(N)
24+
* > O(N) + O(NlogN) > O(NlogN)
25+
*
26+
* Time Complexity: O(NlogN)
27+
* - ๊ธธ์ด N์ธ ๋ฐฐ์—ด์„ ์ ˆ๋ฐ˜์”ฉ ์ž˜๋ผ๊ฐ€๋ฉด์„œ ์•ˆ์— ์ˆ˜๋“ค์„ ๊ณฑํ•˜๊ธฐ O(NlogN)
28+
* - 0~N ๋ฒ”์œ„๋ฅผ ์ ˆ๋ฐ˜์”ฉ ์ž˜๋ผ๊ฐ€๋ฉด์„œ i๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ๋ฒ”์œ„ ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ธฐ O(logN)
29+
* - N๊ฐœ์˜ ์ˆซ์ž์— ๋Œ€ํ•ด์„œ ์ฐพ๊ธฐ => O(NlogN)
30+
* > O(NlogN) + O(NlogN) > O(NlogN)
31+
*/
32+
public int[] productExceptSelf1(int[] nums) {
33+
Map<String, Integer> mp = new HashMap<>();
34+
fndRngMul(mp, nums, 0, nums.length);
35+
int[] ans = new int[nums.length];
36+
for (int i = 0; i < nums.length; i++) {
37+
int val = binaryFnd(mp, i, 0, nums.length);
38+
ans[i] = val;
39+
}
40+
41+
return ans;
42+
}
43+
44+
/***
45+
* ํŠน์ • idx๋ฅผ ์ œ์™ธํ•œ ๊ตฌ๊ฐ„ ๊ณฑ์„ ์žฌ๊ท€์ ์œผ๋กœ ์ฐพ๋Š”๋‹ค.
46+
*
47+
* - ๋ฒ”์œ„๊ฐ€ ๋‹จ์ผ ์›์†Œ๋ฉด ๊ณฑ์— ํฌํ•จ๋  ๊ฐ’์ด ์—†์œผ๋ฏ€๋กœ 1 ๋ฐ˜ํ™˜
48+
* - ๋ฒ”์œ„๋ฅผ ๋ฐ˜์œผ๋กœ ์ž๋ฅด๊ณ , idx๊ฐ€ ์†ํ•˜์ง€ ์•Š์€ ๋ถ€๋ถ„์˜ ๊ณฑ์„ ์ฆ‰์‹œ ์‚ฌ์šฉ
49+
* - idx๊ฐ€ ์†ํ•œ ์ชฝ์€ ๊ณ„์† ์žฌ๊ท€ ํƒ์ƒ‰
50+
*/
51+
private int binaryFnd(Map<String, Integer> mp, int idx, int str, int end) {
52+
int val = 1;
53+
54+
if (end - str == 1) {
55+
return val;
56+
}
57+
58+
int mid = (str + end) / 2;
59+
String leftKey = str + "_" + mid;
60+
String rightKey = mid + "_" + end;
61+
// System.out.println("----idx->"+idx+" mid->"+mid);
62+
// idx๋Š” ์ขŒ์ธก์— ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์ธก ๊ฐ’์„ ๊ณฑํ•จ.
63+
if (idx < mid) {
64+
// ํ•˜์ง€๋งŒ ๋‹ค์€ idx๊ฐ€ ํฌํ•จ๋œ ๋ฒ”์œ„๋ฅผ ํƒ์ƒ‰
65+
int leftVal = binaryFnd(mp, idx, str, mid);
66+
// System.out.println(". ----leftVal->"+leftVal+" base->"+mp.get(rightKey)+"
67+
// val-> "+val);
68+
val = mp.get(rightKey) * leftVal;
69+
} else { // idx๋Š” ์šฐ์ธก์— ์œ„์น˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ขŒ์ธก ๊ฐ’์„ ๊ณฑํ•จ.
70+
int rightVal = binaryFnd(mp, idx, mid, end);
71+
// System.out.println(". ----rightVal->"+rightVal+" base->"+mp.get(leftKey)+"
72+
// val-> "+val);
73+
val = mp.get(leftKey) * rightVal;
74+
}
75+
return val;
76+
}
77+
78+
/**
79+
* ๋ฐฐ์—ด์˜ ๋ฒ”์œ„ [str, end) ๋‚ด ๊ฐ’๋“ค์˜ ๊ณฑ์„ ๊ตฌํ•ด ์บ์‹ฑํ•œ๋‹ค.
80+
*
81+
* - ์›์†Œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ตฌ๊ฐ„์ด๋ฉด nums[str] ์ €์žฅ
82+
* - ๊ตฌ๊ฐ„์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„์–ด ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ์žฌ๊ท€์ ์œผ๋กœ ๊ณ„์‚ฐ
83+
* - ์ „์ฒด ๊ตฌ๊ฐ„์ด ์•„๋‹ˆ๋ผ๋ฉด left * right ๋ฅผ ์บ์‹ฑ
84+
* - ์ „์ฒด ๊ตฌ๊ฐ„(0~N)์€ ์ œ์™ธ ๊ณฑ ๊ณ„์‚ฐ ์‹œ ๋ฌด์‹œํ•ด์•ผ ํ•˜๋ฏ€๋กœ '1' ์ €์žฅ
85+
*/
86+
private int fndRngMul(Map<String, Integer> mp, int[] nums, int str, int end) {
87+
String k = str + "_" + end;
88+
89+
if (end - str == 1) {
90+
// System.out.println("put k->"+k+" v->"+v);
91+
mp.put(k, nums[str]);
92+
return nums[str];
93+
}
94+
int mid = (str + end) / 2;
95+
int leftRngMul = fndRngMul(mp, nums, str, mid);
96+
int rightRngMul = fndRngMul(mp, nums, mid, end);
97+
98+
int v = 1;
99+
// ์ „์ฒด ๊ณฑ์€ ๊ตฌํ•˜์ง€ ์•Š์Œ.
100+
if (str == 0 && end == nums.length) {
101+
v = 1;
102+
} else {
103+
v = leftRngMul * rightRngMul;
104+
}
105+
mp.put(k, v);
106+
// System.out.println("put2 k->"+k+" v->"+v);
107+
return v;
108+
}
109+
110+
/**
111+
* ํ’€์ด์š”์•ฝ: ์ขŒ์šฐ๋กœ ๋ˆ„์ ๊ณฑํ•˜๋Š” ๋ฐฐ์—ญ์„ ๋งŒ๋“ค๊ณ , i๋ฅผ ์ œ์™ธํ•œ ์ขŒ์šฐ ๋ฒ”์œ„ ๋ˆ„์ ๊ณฑ์„ ๊ณฑํ•œ๋‹ค.
112+
* prefix-product์™€ suffix-product๋ฅผ ๊ตฌํ•˜๊ธฐ
113+
*
114+
* ํ’€์ด๊ฒฐ๊ณผ:
115+
* Runtime: 3 ms (Beats 21.34%)
116+
* Memory: 64.97 MB (Beats 19.65%)
117+
* Space Complexity: O(N)
118+
* - ๊ธธ์ด๊ฐ€ N์ธ ๋ฐฐ์—ด์„ 3๊ฐœ๋ฅผ ๋งŒ๋“ค๊ธฐ
119+
* > O(N) + O(N) + O(N) > O(N)
120+
* Time Complexity: O(N)
121+
* - ๊ธธ์ด N์ธ ๋ฐฐ์—ด 2๋ฒˆ ์ˆœํšŒํ•˜๊ธฐ > O(N)
122+
* - 0~N์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๋ˆ„์ ๊ณฑ ๊ณฑํ•˜๊ธฐ > O(N)
123+
* > O(N) + O(N) > O(N)
124+
*/
125+
public int[] productExceptSelf2(int[] nums) {
126+
int L = nums.length;
127+
int[] leftAccMul = new int[L];
128+
int[] rightAccMul = new int[L];
129+
int[] ans = new int[L];
130+
131+
// 0๋ถ€ํ„ฐ ๋ˆ„์ ๊ณฑํ•˜๊ธฐ
132+
leftAccMul[0] = nums[0];
133+
for (int i = 1; i < L; i++) {
134+
leftAccMul[i] = leftAccMul[i - 1] * nums[i];
135+
}
136+
137+
// L-1๋ถ€ํ„ฐ ๋ˆ„์ ๊ณฑํ•˜๊ธฐ
138+
rightAccMul[L - 1] = nums[L - 1];
139+
for (int i = L - 2; i >= 0; i--) {
140+
rightAccMul[i] = rightAccMul[i + 1] * nums[i];
141+
}
142+
143+
// i๋ฅผ ์ œ์™ธํ•œ ๋ˆ„์ ๊ณฑ์„ ๊ณฑํ•˜๊ธฐ
144+
for (int i = 0; i < L; i++) {
145+
int val = 1;
146+
if (i == 0) { // ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ๋งŒ ๊ณฑํ•˜๊ธฐ
147+
val *= rightAccMul[i + 1]; // i+1 ~ L-1๊นŒ์ง€ ๊ณฑํ•œ ๊ฐ’
148+
} else if (i == L - 1) { // ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ๋งŒ ๊ณฑํ•˜๊ธฐ
149+
val *= leftAccMul[i - 1]; // 0~L-2๊นŒ์ง€ ๊ณฑํ•œ ๊ฐ’
150+
} else {
151+
val *= leftAccMul[i - 1] * rightAccMul[i + 1];
152+
}
153+
ans[i] = val;
154+
}
155+
return ans;
156+
}
157+
158+
/**
159+
* ํ’€์ด์š”์•ฝ: ์ขŒ์šฐ๋กœ ๋ˆ„์ ๊ณฑํ•˜๋Š” ๋ฐฐ์—ญ์„ ๋งŒ๋“ค๊ณ , i๋ฅผ ์ œ์™ธํ•œ ์ขŒ์šฐ ๋ฒ”์œ„ ๋ˆ„์ ๊ณฑ์„ ๊ณฑํ•œ๋‹ค.
160+
* prefix-product ๋ฐฐ์—ด์„ ์ถœ๋ ฅ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๊ธฐ
161+
* suffix-product ๋ฐฐ์—ด ๋Œ€์‹  ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ์„ ํ•œ ๋ณ€์ˆ˜๋กœ๋งŒ ๊ด€๋ฆฌํ•œ๋‹ค.
162+
*
163+
* ํ’€์ด๊ฒฐ๊ณผ:
164+
* Runtime: 2 ms (Beats 89.36%)
165+
* Memory: 72.28 MB (Beats 5.61%)
166+
* Space Complexity: O(1)
167+
* - ๊ธธ์ด๊ฐ€ N์ธ ๋ฐฐ์—ด์„ 1๊ฐœ๋ฅผ ๋งŒ๋“ค์ง€๋งŒ, return์— ์“ฐ์ด๋ฏ€๋กœ ์นด์šดํŒ… ์•ˆ๋จ.
168+
* - suffix-product ๊ฒŒ์‚ฐ์šฉ ๋ณ€์ˆ˜ 1๊ฐœ
169+
* > O(1) > O(1)
170+
* Time Complexity: O(N)
171+
* - ๊ธธ์ด N์ธ ๋ฐฐ์—ด 2๋ฒˆ ์ˆœํšŒํ•˜๊ธฐ > O(N)
172+
* > O(N) > O(N)
173+
*
174+
*/
175+
public int[] productExceptSelf3(int[] nums) {
176+
int L = nums.length;
177+
int[] leftAccMul = new int[L];
178+
179+
// 0๋ถ€ํ„ฐ ๋ˆ„์ ๊ณฑํ•˜๊ธฐ
180+
leftAccMul[0] = 1;
181+
for (int i = 1; i < L; i++) {
182+
leftAccMul[i] = leftAccMul[i - 1] * nums[i - 1];
183+
// System.out.println("i->"+i+" val->"+leftAccMul[i]);
184+
}
185+
// System.out.println("--------------");
186+
// L-1๋ถ€ํ„ฐ ๋ˆ„์ ๊ณฑํ•˜๊ธฐ
187+
int rightAccMul = nums[L - 1];
188+
for (int i = L - 2; i >= 0; i--) {
189+
// L-1๋ฒˆ์งธ ์ˆซ์ž๋Š” suffix-product์—์„œ ๊ณฑํ• ๊ฒŒ ์—†๋‹ค..
190+
// 0๋ฒˆ์งธ ์ˆซ์ž๋Š” 1~L-1 ๋ฒ”์œ„ ๋ˆ„์ ๊ณฑ๋งŒ ๊ณฑํ•ด์•ผํ•œ๋‹ค.
191+
leftAccMul[i] *= rightAccMul;
192+
rightAccMul *= nums[i];
193+
// System.out.println("i->"+i+" val->"+leftAccMul[i]);
194+
}
195+
return leftAccMul;
196+
}
197+
}

โ€Žvalid-anagram/haxr369.javaโ€Ž

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
class Solution {
2+
/**
3+
* s์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜์™€ r์˜ ๋ฌธ์ž ๊ฐœ์ˆ˜๊ฐ€ ๋™์ผํ•œ์ง€ ์ฒดํฌ
4+
* ๋ฐฐ์—ด1,2์— ๊ฐ๊ฐ ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ
5+
* a-z๊นŒ์ง€ 26๊ฐœ
6+
*/
7+
public boolean isAnagram(String s, String t) {
8+
/**
9+
* Runtime: 2 ms (Beats 98.15%)
10+
* Memory: 44.74 MB (Beats 38.46%)
11+
* Space Complexity: O(1)
12+
* - 26 ํฌ๊ธฐ์˜ ๋ฐฐ์—ด 2๊ฐœ ์‚ฌ์šฉ์œผ๋กœ 2*O(26)
13+
* > O(1)
14+
* Time Complexity: O(N)
15+
* - ๋ฌธ์ž์—ด s์™€ t์˜ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ํƒ์ƒ‰ => 2*O(N)
16+
* - ๋‘ ๋ฌธ์ž ์‚ฌ์šฉ๊ฑด์ˆ˜ ์ €์žฅ ๋ฐฐ์—ด ํƒ์ƒ‰ => O(26)
17+
* > O(N)
18+
*/
19+
int[] scount = new int[26];
20+
int[] tcount = new int[26];
21+
22+
char A = 'a';
23+
for (char c : s.toCharArray()) {
24+
scount[c - A] += 1;
25+
}
26+
27+
for (char c : t.toCharArray()) {
28+
tcount[c - A] += 1;
29+
}
30+
31+
for (int i = 0; i < 26; i++) {
32+
if (scount[i] != tcount[i]) {
33+
return false;
34+
}
35+
}
36+
37+
return true;
38+
39+
}
40+
}

0 commit comments

Comments
ย (0)