Skip to content

Commit c57136f

Browse files
authored
Merge pull request #2240 from rivkode/main
[rivkode] WEEK 08 Solutions
2 parents edfafd4 + db4156b commit c57136f

File tree

2 files changed

+172
-0
lines changed

2 files changed

+172
-0
lines changed
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
/*
2+
1. ๋ฌธ์ œ ์ดํ•ด
3+
4+
์ž…๋ ฅ์œผ๋กœ string s ์™€ int k ๊ฐ€ ์žˆ๊ณ  s ์— ๋Œ€ํ•ด k๋ฒˆ ๋งŒํผ ๊ธ€์ž๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
5+
์ด๋•Œ ์ตœ๋Œ€๋กœ ์—ฐ์†๋œ substring์˜ ๊ธธ์ด๋ฅผ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.
6+
์ฆ‰ k๋ฒˆ๋งŒํผ ๋ฐ”๊ฟ€ ๋•Œ ์ตœ๋Œ€์˜ substring์ด ๋  ์ˆ˜ ์žˆ๋„๋ก ๊ธ€์ž๋ฅผ ๋ฐ”๊ฟ”์•ผ ํ•œ๋‹ค.
7+
8+
์กฐ๊ฑด: s๊ธธ์ด๋Š” ์ตœ๋Œ€ 10๋งŒ, k๋Š” ์ตœ๋Œ€ s๊ธธ์ด
9+
10+
์—ฌ๊ธฐ์„œ ํ•œ๊ฐ€์ง€ ํฌ์ธํŠธ๋Š” ์ „์ฒด ๊ธธ์ด n ์—์„œ ๊ฐ€์žฅ ๊ธด ๋™์ผ ๋ฌธ์ž ๊ธธ์ด s ๋ฅผ ๋บ€ ๊ฐ’์ธ n - s ๊ฐ€ k๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ์ด๊ฑด ํ•ญ์ƒ ์ „์ฒด ๊ธธ์ด ๋งŒํผ์— ๋Œ€ํ•ด ๋™์ผ ๋ฌธ์ž์—ด๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
11+
์™œ๋ƒํ•˜๋ฉด ๋ฐ”๊ฟ”์•ผํ•  ๋ฌธ์ž ๊ฐœ์ˆ˜๋ณด๋‹ค ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ˆ˜๊ฐ€ ๋” ๋งŽ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
12+
13+
2. ์•Œ๊ณ ๋ฆฌ์ฆ˜
14+
15+
substring์ธ๊ฑธ ๋ณด๋‹ˆ ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์ƒ๊ฐ๋‚˜๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ ์šฉ์‹œ์ผœ์•ผํ• ์ง€ ๊ณ ๋ฏผ์ด๋‹ค.
16+
์ž‘์€ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •์˜ํ•ด์•ผํ• ๊นŒ ?
17+
18+
๋งŒ์•ฝ dp๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด?
19+
20+
์ •๋‹ต ์ฐธ๊ณ  -> ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค
21+
2๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋™์ผํ•œ ์ธ๋ฑ์Šค์— ๋†“๊ณ  ์ข…๋ฃŒ ์ธ๋ฑ์Šค๋ฅผ 1์นธ์”ฉ ๋Š˜๋ ค๊ฐ€๋ฉด์„œ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์ด ๋‚˜์˜ค๋Š”์ง€ ์ฒดํ‚นํ•œ๋‹ค
22+
23+
3. ์˜ˆ์™ธ
24+
25+
26+
4. ๊ตฌํ˜„
27+
28+
GPT ์ฐธ๊ณ 
29+
30+
์ด๊ฑธ ๊ตฌํ˜„ ํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ํŠนํžˆ while๋ฌธ์„ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค.
31+
32+
for๋ฌธ์„ ํ†ตํ•ด end ํฌ์ธํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค
33+
์ด๋ฅผ ํ†ตํ•ด ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค
34+
๊ทธ๋ฆฌ๊ณ  counter map์— ํ•ด๋‹น ๊ธ€์ž count๋ฅผ 1 ์ถ”๊ฐ€ํ•˜์—ฌ ๋„ฃ๋Š”๋‹ค
35+
๋ชจ๋“  ๊ธ€์ž count๋“ค์„ ๋Œ๋ฉด์„œ ์ตœ๋Œ€ maxCount๋ฅผ ์ฐพ๋Š”๋‹ค
36+
37+
๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ ์กฐ๊ฑด์ธ k๋ฒˆ์„ ์‚ฌ์šฉํ•ด์„œ ํ˜„์žฌ ์œˆ๋„์šฐ๋ฅผ ๋™์ผํ•œ ๊ธ€์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ์ฐพ์•„๋‚ธ๋‹ค.
38+
์ด๋•Œ while๋ฌธ์˜ (end - start + 1 - maxCount > k) ๋ถ€๋ถ„์ด ํ•ต์‹ฌ์ด๋‹ค. ๊ฐ€์žฅ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๋Œ€๋กœ ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด + 1 - maxCount ๊ฐ€ k๋ณด๋‹ค ํฌ๋‹ค๋Š” ๊ฒƒ์€ ๋ณ€๊ฒฝํ•ด์•ผํ•  ๊ธธ์ด๊ฐ€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด๋ณด๋‹ค ํฌ๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๋ชจ๋‘ ๋™์ผํ•œ ๊ธ€์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์œˆ๋„์šฐ ํฌ๊ธฐ๋ฅผ ์™ผ์ชฝ์—์„œ ์ค„์—ฌ๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค.
39+
40+
์ด๋ ‡๊ฒŒ ์ค„์—ฌ๋‚˜๊ฐ€๋‹ค๊ฐ€ ๋ณ€๊ฒฝํ•ด์•ผํ•  ๊ธธ์ด = ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ธธ์ด ๊ฐ€ ๋˜๋ฉด ํ˜„์žฌ start ~ end ์œˆ๋„์šฐ์—์„œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€์˜ ๋™์ผ ๊ธ€์ž ๊ธธ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค๋ฏ€๋กœ maxLen๋ฅผ ์ดˆ๊ธฐํ™” ์‹œ์ผœ์ค€๋‹ค.
41+
42+
ํ˜„์žฌ start ~ end ์—์„œ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์•Œ์•„๋ƒˆ์œผ๋ฏ€๋กœ ๊ทธ ๋‹ค์Œ end๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉฐ ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.
43+
44+
45+
GPT ๋ฉด์ ‘์‹ ๋‹ต๋ณ€
46+
47+
๐ŸŽค โ‘  ๋ฌธ์ œ ํ•ต์‹ฌ ์ •์˜๋ถ€ํ„ฐ ๋งํ•œ๋‹ค
48+
49+
โ€œ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์€
50+
์—ฐ์†๋œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ํ•˜๋‚˜ ์„ ํƒํ–ˆ์„ ๋•Œ,
51+
์ตœ๋Œ€ k๋ฒˆ ๋ฌธ์ž ๊ต์ฒด๋กœ ๋ชจ๋‘ ๊ฐ™์€ ๋ฌธ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.โ€
52+
53+
๐ŸŽค โ‘ก ํŒ๋‹จ ๊ธฐ์ค€์„ ๋จผ์ € ์ œ์‹œํ•œ๋‹ค (์ค‘์š”)
54+
55+
โ€œ์–ด๋–ค ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ n,
56+
๊ทธ ์•ˆ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ s๋ผ๊ณ  ํ•˜๋ฉด,
57+
n - s โ‰ค k ์ธ ๊ฒฝ์šฐ์—๋งŒ
58+
์ด ๋ฌธ์ž์—ด์€ k๋ฒˆ ์ด๋‚ด์˜ ๊ต์ฒด๋กœ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.โ€
59+
60+
๐Ÿ‘‰ ์—ฌ๊ธฐ์„œ ๋ฉด์ ‘๊ด€์€ ์ด๋ฏธ โ€˜์•„, ๋ณธ์งˆ ์ดํ•ดํ–ˆ๊ตฌ๋‚˜โ€™ ํ•˜๊ณ  ์ฒดํฌํ•จ.
61+
62+
๐ŸŽค โ‘ข ์ด ๊ธฐ์ค€์„ ์–ด๋–ป๊ฒŒ ํšจ์œจ์ ์œผ๋กœ ์ฐพ๋Š”์ง€ ์„ค๋ช…
63+
64+
โ€œ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธด n์„ ์ฐพ๊ธฐ ์œ„ํ•ด
65+
์ €๋Š” ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.โ€
66+
67+
โ€œ์˜ค๋ฅธ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œํ‚ค๋ฉฐ ์œˆ๋„์šฐ๋ฅผ ํ™•์žฅํ•˜๊ณ ,
68+
ํ˜„์žฌ ์œˆ๋„์šฐ ๋‚ด ๋ฌธ์ž ๋นˆ๋„๋ฅผ ์นด์šดํŠธํ•ฉ๋‹ˆ๋‹ค.โ€
69+
70+
๐ŸŽค โ‘ฃ ์œˆ๋„์šฐ ์œ ์ง€ ์กฐ๊ฑด ์„ค๋ช… (ํ•ต์‹ฌ ๋กœ์ง)
71+
72+
โ€œํ˜„์žฌ ์œˆ๋„์šฐ์—์„œ
73+
(์œˆ๋„์šฐ ๊ธธ์ด - ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ ๋ฌธ์ž ์ˆ˜)๊ฐ€
74+
k๋ฅผ ์ดˆ๊ณผํ•˜๋ฉด,
75+
ํ•ด๋‹น ๊ตฌ๊ฐ„์€ ๋” ์ด์ƒ ์œ ํšจํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ
76+
์™ผ์ชฝ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™์‹œ์ผœ ์œˆ๋„์šฐ๋ฅผ ์ค„์ž…๋‹ˆ๋‹ค.โ€
77+
78+
๐Ÿ‘‰ ์ด ๋ฌธ์žฅ์ด ๋ฐ”๋กœ ์ฝ”๋“œ์˜ while ์กฐ๊ฑด ์„ค๋ช…์ด๋‹ค.
79+
80+
๐ŸŽค โ‘ค ์ •๋‹ต ๊ฐฑ์‹  ์‹œ์  ์„ค๋ช…
81+
82+
โ€œ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋™์•ˆ์—๋Š”
83+
ํ˜„์žฌ ์œˆ๋„์šฐ ๊ธธ์ด๋ฅผ ์ตœ๋Œ€๊ฐ’์œผ๋กœ ๊ฐฑ์‹ ํ•˜๋ฉฐ
84+
์ „์ฒด ํƒ์ƒ‰์€ ํ•œ ๋ฒˆ๋งŒ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ
85+
์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(N)์ž…๋‹ˆ๋‹ค.โ€
86+
87+
*/
88+
89+
import java.util.*;
90+
91+
class Solution {
92+
public int characterReplacement(String s, int k) {
93+
int maxLen = 0;
94+
Map<Character, Integer> counter = new HashMap<>();
95+
96+
int start = 0;
97+
98+
for (int end = 0; end < s.length(); end++) {
99+
char c = s.charAt(end);
100+
counter.put(c, counter.getOrDefault(c, 0) + 1);
101+
102+
int maxCount = 0;
103+
for (int count : counter.values()) {
104+
maxCount = Math.max(maxCount, count);
105+
}
106+
107+
while (end - start + 1 - maxCount > k) {
108+
char leftChar = s.charAt(start);
109+
counter.put(leftChar, counter.get(leftChar) - 1);
110+
start++;
111+
}
112+
113+
maxLen = Math.max(maxLen, end - start + 1);
114+
}
115+
116+
return maxLen;
117+
}
118+
}

โ€Žreverse-bits/rivkode.javaโ€Ž

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
3+
1. ๋ฌธ์ œ์ดํ•ด
4+
์ „๋‹ฌ๋ฐ›์€ int ๋ฅผ binary bit ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค
5+
๋ณ€ํ™˜ํ•œ ๊ฐ’์„ reverse ๋’ค์ง‘์–ด์„œ ๋‹ค์‹œ int๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค
6+
7+
2. ์•Œ๊ณ ๋ฆฌ์ฆ˜
8+
.toBinaryString() ๊ณผ .toUnsignedInt() ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ๋‹ค
9+
10+
3. ์˜ˆ์™ธ
11+
n ๊ฐ’์€ sign ์ด๋ฏ€๋กœ ์ตœ๋Œ€ 21์–ต๊นŒ์ง€ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค
12+
n์€ 0๋ณด๋‹ค ํฌ๋ฏ€๋กœ ํ•ญ์ƒ ์ฒซ๋ฒˆ์งธ bit๊ฐ’์€ 0์ด๋‹ค
13+
14+
15+
4. ๊ตฌํ˜„
16+
17+
์ „๋‹ฌ๋ฐ›์€ n์„ bit๋กœ ๋ณ€ํ™˜
18+
๋ณ€ํ™˜ํ•œ string์„ stack ์„ ์‚ฌ์šฉํ•ด์„œ push peek ํ•˜์—ฌ reverse
19+
๋ณ€ํ™˜ํ•œ bit ๊ฐ’์„ ๋‹ค์‹œ int๋กœ ๋ณ€ํ™˜
20+
21+
์ฒ˜์Œ์—๋Š” stack์„ ์‚ฌ์šฉํ•˜๋ ค ํ–ˆ์œผ๋‚˜ ์ตœ๋Œ€ bit ์ˆ˜๊ฐ€ ์ œํ•œ์  ์•ฝ 30๊ฐœ ์ด๋ฏ€๋กœ
22+
๋งค๋ฒˆ String์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ StringBuilder๋ฅผ ์‚ฌ์šฉํ•ด๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ
23+
๊ตณ์ด ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์„๊นŒ ?
24+
25+
toBinaryString() ์„ ํ•˜๋ฉด 32์นธ์„ ์ฑ„์šฐ์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋งˆ์ง€๋ง‰์— ์ด ๋นˆ 0 ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด์ค˜์•ผ ํ•œ๋‹ค
26+
๊ทธ๋ž˜์•ผ ๋’ค์ง‘์—ˆ์„๋•Œ ์ •์ƒ ๊ฒฐ๊ณผ ๋‚˜์˜ด
27+
28+
*/
29+
30+
import java.util.*;
31+
32+
class Solution {
33+
public int reverseBits(int n) {
34+
String bit = Integer.toBinaryString(n);
35+
StringBuilder sb = new StringBuilder();
36+
37+
for (int i=bit.length() - 1; i>=0; i--) {
38+
System.out.println(i);
39+
char c = bit.charAt(i);
40+
int temp = c - '0';
41+
sb.append(String.valueOf(temp));
42+
}
43+
44+
int size = bit.length();
45+
int leadingZero = 32 - size;
46+
for (int i=0; i<leadingZero; i++)
47+
sb.append("0");
48+
System.out.println(sb.toString());
49+
50+
int decimalValue = Integer.parseInt(sb.toString(), 2);
51+
52+
return decimalValue;
53+
}
54+
}

0 commit comments

Comments
ย (0)