|
| 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 | +} |
0 commit comments