๋ฌธ์ ์ค๋ช
https://school.programmers.co.kr/learn/courses/30/lessons/140108
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์์ด s๊ฐ ์ ๋ ฅ๋์์ ๋ ๋ค์ ๊ท์น์ ๋ฐ๋ผ์ ์ด ๋ฌธ์์ด์ ์ฌ๋ฌ ๋ฌธ์์ด๋ก ๋ถํดํ๋ ค๊ณ ํฉ๋๋ค.
- ๋จผ์ ์ฒซ ๊ธ์๋ฅผ ์ฝ์ต๋๋ค. ์ด ๊ธ์๋ฅผ x๋ผ๊ณ ํฉ์๋ค.
- ์ด์ ์ด ๋ฌธ์์ด์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฝ์ด๋๊ฐ๋ฉด์, x์ x๊ฐ ์๋ ๋ค๋ฅธ ๊ธ์๋ค์ด ๋์จ ํ์๋ฅผ ๊ฐ๊ฐ ์ ๋๋ค. ์ฒ์์ผ๋ก ๋ ํ์๊ฐ ๊ฐ์์ง๋ ์๊ฐ ๋ฉ์ถ๊ณ , ์ง๊ธ๊น์ง ์ฝ์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํฉ๋๋ค.
- s์์ ๋ถ๋ฆฌํ ๋ฌธ์์ด์ ๋นผ๊ณ ๋จ์ ๋ถ๋ถ์ ๋ํด์ ์ด ๊ณผ์ ์ ๋ฐ๋ณตํฉ๋๋ค. ๋จ์ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ข ๋ฃํฉ๋๋ค.
- ๋ง์ฝ ๋ ํ์๊ฐ ๋ค๋ฅธ ์ํ์์ ๋ ์ด์ ์ฝ์ ๊ธ์๊ฐ ์๋ค๋ฉด, ์ญ์ ์ง๊ธ๊น์ง ์ฝ์ ๋ฌธ์์ด์ ๋ถ๋ฆฌํ๊ณ , ์ข ๋ฃํฉ๋๋ค.
๋ฌธ์์ด s๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ ๊ณผ์ ๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ค๋ก ๋ถํดํ๊ณ , ๋ถํดํ ๋ฌธ์์ด์ ๊ฐ์๋ฅผ return ํ๋ ํจ์ solution์ ์์ฑํ์ธ์.
์ ํ ์ฌํญ
- 1 ≤ s์ ๊ธธ์ด ≤ 10,000
- s๋ ์์ด ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
| s | result |
| "banana" | 3 |
| "abracadabra" | 6 |
| "aaabbaccccabba" | 3 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- s = "banana"์ธ ๊ฒฝ์ฐ ba - na - na์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- s = "abracadabra"์ธ ๊ฒฝ์ฐ ab - ra - ca - da - br - a์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
์ ์ถ๋ ฅ ์ #3
- s = "aaabbaccccabba"์ธ ๊ฒฝ์ฐ aaabbacc - ccab - ba์ ๊ฐ์ด ๋ถํด๋ฉ๋๋ค.
๋ด๊ฐ ์์ฑํ ์ฝ๋
class Solution {
public int solution(String s) {
// ๋ถํดํ ๋ฌธ์์ด ๊ฐ์
int answer = 0;
// ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ๊ฐ์ ๋ฌธ์ ๊ฐ์, ๋ค๋ฅธ ๋ฌธ์ ๊ฐ์
int same = 0, diff = 0;
// ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋ฌธ์
char first = s.charAt(0);
// ๋ฌธ์์ด ํ์ธ
for (int i = 0; i < s.length(); i++) {
// ๋ฌธ์๊ฐ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ๊ฐ์ ๊ฒฝ์ฐ same 1 ์ฆ๊ฐ
if (s.charAt(i) == first) {
same++;
} else { // ์๋ ๊ฒฝ์ฐ diff 1 ์ฆ๊ฐ
diff++;
}
// same๊ณผ diff๊ฐ ๊ฐ์ ๊ฒฝ์ฐ
if (same == diff) {
// answer 1 ์ฆ๊ฐ
answer++;
// ๋ง์ฝ i+1์ด s์ ๊ธธ์ด๋ณด๋ค ์์ ๊ฒฝ์ฐ
if (i+1 < s.length()) {
// ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ฅผ i+1๋ฒ์งธ ๋ฌธ์๋ก ์ค์
first = s.charAt(i + 1);
}
// ์ด๊ธฐํ
same = 0;
diff = 0;
}
}
// same ๋๋ diff๊ฐ 0์ด ์๋ ๊ฒฝ์ฐ answer 1 ์ฆ๊ฐ
if (same != 0 || diff != 0) {
answer++;
}
// ๋ถํดํ ๋ฌธ์์ด ๊ฐ์ ๋ฐํ
return answer;
}
}
๋ฌธ์ ๋ฅผ ํ๊ธฐ ์ํด ์๊ฐํ ๋ฐฉํฅ
์ฒ์ ๋ฌธ์ ๋ฅผ ๋ดค์ ๋, ๋ฌธ์์ด์ ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ ๋๋๋ ๋ฌธ์ ๋ผ๋ ์ ์ ํ์ ํ๋ค. ๋จ์ํ ์์๋ก ์๋ผ๋ด๋ ๊ฒ์ด ์๋๋ผ, ์ฒซ ๊ธ์์ ๊ฐ์ ๋ฌธ์์ ๊ฐ์์ ๋ค๋ฅธ ๋ฌธ์์ ๊ฐ์๊ฐ ๊ฐ์์ง ๋ ๋๋ ๋ฐฉ์์ผ๋ก ๋ถ๋ฆฌํด์ผ ํ๋ค๋ ์กฐ๊ฑด์ด ์์๋ค. ๋ฐ๋ผ์ ๋จ์ํ substring์ผ๋ก ์๋ผ์ ํ์ธํ๋ ๊ฒ๋ณด๋ค๋, ๋ฌธ์์ด์ ์์์๋ถํฐ ์์ฐจ์ ์ผ๋ก ํ์ํ๋ฉด์ ๊ฐ์ ๊ธ์์ ๋ค๋ฅธ ๊ธ์์ ๊ฐ์๋ฅผ ์นด์ดํธํ๋ ๋ฐฉ์์ด ๋ ํจ์จ์ ์ด๋ผ๊ณ ํ๋จํ๋ค.
์กฐ๊ฑด์ ๋ถ์ํด ๋ณด๋ฉด, ์๋ก์ด ๊ตฌ๊ฐ์ด ์์๋ ๋ ๊ธฐ์ค์ด ๋๋ ๋ฌธ์๋ฅผ ํ๋ ์ ํด์ผ ํ๊ณ , ์ดํ ๋ฌธ์๋ฅผ ํ์ํ๋ฉด์ ๊ธฐ์ค ๋ฌธ์์ ๊ฐ์ผ๋ฉด same ์นด์ดํธ๋ฅผ, ๋ค๋ฅด๋ฉด diff ์นด์ดํธ๋ฅผ ์ฆ๊ฐ์ํค๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ same๊ณผ diff๊ฐ ๊ฐ์์ง๋ ์๊ฐ ํ๋์ ๊ตฌ๊ฐ์ด ์์ฑ๋๋ฏ๋ก ๋ฌธ์์ด์ ๋๊ณ , ๊ทธ๋ค์ ๋ฌธ์๋ถํฐ ๋ค์ ์๋ก์ด ๊ธฐ์ค์ ์ธ์ ๋ฐ๋ณตํ๋ค. ๋ง์ฝ ํ์์ด ๋๋ฌ๋๋ฐ same๊ณผ diff๊ฐ ์์ง ๊ฐ์ง ์๋ค๋ฉด, ๋ง์ง๋ง ๋จ์ ๋ถ๋ถ๋ ํ๋์ ๊ตฌ๊ฐ์ผ๋ก ์ฒ๋ฆฌํด์ผ ํ๋ค.
์ด ๊ณผ์ ์ ๊ตฌํํ๊ธฐ ์ํด ๋ฌธ์์ด์ ์์ฐจ์ ์ผ๋ก ํ์ธํ๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ๊ณ , ํน์ ์์น์ ๋ฌธ์๋ฅผ ํ์ธํ ๋๋ charAt() ๋ฉ์๋๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ํ๋จํ๋ค. ๊ฒฐ๊ตญ ์ ์ฒด ๋ฌธ์์ด์ ํ ๋ฒ๋ง ์ํํ๋ฉด์ ๊ท์น๋๋ก ๋ถ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์, ์๊ฐ ๋ณต์ก๋๋ O(n)์ผ๋ก ์ถฉ๋ถํ ํจ์จ์ ์ธ ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๋ค.
'๐ฆ ํ๋ก๊ทธ๋๋จธ์ค > ๐๏ธ ์๊ณ ๋ฆฌ์ฆ ํ์ด(Java)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋คํธ ๊ฒ์ (0) | 2025.10.02 |
|---|---|
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ํ๋ฒ๊ฑฐ ๋ง๋ค๊ธฐ (0) | 2025.10.01 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋๋ง์ ์ํธ (0) | 2025.09.25 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] ๋ ๋งต๊ฒ (0) | 2025.09.23 |
| [ํ๋ก๊ทธ๋๋จธ์ค/Java] k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ (0) | 2025.09.15 |