๐ ๋ฌธ์
์๋ค๋ฅผ ๋ค์ง์ด๋ ๋๊ฐ์ ๋ฌธ์์ด์ ํฐ๋ฆฐ๋๋กฌ(palindrome)์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฌธ์์ด s๊ฐ ์ฃผ์ด์ง ๋, s์ ๋ถ๋ถ๋ฌธ์์ด(Substring)์ค ๊ฐ์ฅ ๊ธด ํฐ๋ฆฐ๋๋กฌ์ ๊ธธ์ด๋ฅผ return ํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
์๋ฅผ๋ค๋ฉด, ๋ฌธ์์ด s๊ฐ "abcdcba"์ด๋ฉด 7์ returnํ๊ณ "abacde"์ด๋ฉด 3์ returnํฉ๋๋ค.
์ ํ์ฌํญ
- ๋ฌธ์์ด s์ ๊ธธ์ด : 2,500 ์ดํ์ ์์ฐ์
- ๋ฌธ์์ด s๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ๊ตฌ์ฑ
์ ์ถ๋ ฅ ์
"abcdcba" | 7 |
"abacde" | 3 |
โ๏ธ ํ์ด
์ด๋ค ์์ผ๋ก ํ์ด์ผํ ์ง ์ ๋ง ๊ณ ๋ฏผ์ ๋ง์ด ํ๋ค. ์ฒ์ ์ ํํ ๋ฐฉ๋ฒ์ ์ด์ค for๋ฌธ์ ๋๋ ค์ ์ํ๋ฒณ์ด ๊ฐ์์ง ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ํ๊ณ i๋ ์์์ง๋ ๋ฐฉํฅ์ผ๋ก, j๋ ์ปค์ง๋ ๋ฐฉํฅ์ผ๋ก ๋ฐ๋ณต๋ฌธ์ ๋๋ฆฌ๋ฉด์ ์ฒดํฌํ๋ฉฐ ๋ํด๊ฐ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ๋ค. ํ์ง๋ง ์ด๋ฐ ๋ฐฉ์์ ์ ํํ์ ๋ 'aacbaa'์ฒ๋ผ ๊ฐ์ด๋ฐ ๋ฌธ์๋ ํฐ๋ฆฐ๋๋กฌ์ ์กฐ๊ฑด์ ์ถฉ์กฑ์ํค์ง ๋ชปํ์ง๋ง ์ฌ์ด๋์ aa๊ฐ ํฐ๋ฆฐ๋๋กฌ์ผ๋ก ๊ณ์ฐ๋์ด 4๋ผ๋ ๋ต์ด ๋์ถ๋ฌ๋ค.
๋ค์์ผ๋ก๋ i๋ ์์์ง๋ ๋ฐฉํฅ์ผ๋ก, j๋ ์ปค์ง๋ ๋ฐฉํฅ์ผ๋ก ์ด์ค for๋ฌธ์ ํ๋ฒ๋ง ๋๋ฆฌ๋ฉด์ i, j์ธ๋ฑ์ค๊ฐ ๊ฐ๋ค๋ฉด 1์ ํ ๋นํ๊ณ i, j์ ์ธ๋ฑ์ค ์ฐจ์ด๊ฐ 1์ผ๋ ๊ฐ๋ค๋ฉด 2๋ฅผ ํ ๋น, ๋ง์ฝ i+1, j-1์ ๊ฐ์ด ์๋ค๋ฉด check[i+1][j-1]์ ๊ฐ์ 2๋ฅผ ๋ํด์ ํ ๋นํ๋ค. check[i+1][j-1]์ ๊ฐ์ ํ์ธํ๋ ์ด์ ๋ ์ด์ฐจ์ ๋ฐฐ์ด์ ํ์ํ ๋ i๋ ํฐ๊ฐ์์ ์์ ๊ฐ์ผ๋ก, j๋ ์์ ๊ฐ์์ ํฐ ๊ฐ์ผ๋ก ๋๋๋ฐ ๊ฐ์ด ์๋ค๋ฉด ๋ ์์ ๋จ์์ ํฐ๋ฆฐ๋๋กฌ์ด ์๋ค๋ ์๋ฏธ์ด๊ธฐ ๋๋ฌธ์ด๋ค. i+1, j-1๋ฅผ ํ์ธํ ๋ ํ์ฌ i, j์ ์ธ๋ฑ์ค์ ํด๋นํ๋ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๊ทธ ์์ ๋จ์์ ํฐ๋ฆฐ๋๋กฌ์ ์ ์ฌ์ด๋๊ฐ ๊ฐ์์ ์๋ฏธํ๋ค.
โจ๏ธ ์ฝ๋
function solution(s) {
var answer = 0;
const len = s.length;
const check = [...Array(len)].map(_ => new Array(len).fill(0));
for (let i = len; i >= 0; i--) {
for (let j = i; j < len; j++) {
if (i === j) check[i][j] = 1;
else if (s[i] === s[j]) {
if (i + 1 < len && j - 1 >= 0 && check[i + 1][j - 1]) {
check[i][j] += check[i + 1][j - 1] + 2;
} else if (j - i === 1) {
check[i][j] = 2;
}
}
answer = answer = Math.max(answer, check[i][j]);
}
}
return answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ด์ค์ฐ์ ์์ ํ (0) | 2023.02.25 |
---|---|
[Algorithm] ์ผ๊ทผ ์ง์ (0) | 2023.02.24 |
[Algorithm] ์ฌํ๊ฒฝ๋ก (0) | 2023.02.23 |
[Algorithm] ๊ธฐ์ง๊ตญ์ค์น (0) | 2023.02.22 |
[Algorithm] ๋จ์ด๋ณํ (0) | 2023.02.21 |