๋ฌธ์
ํ์ด ๊ณผ์
์ฃผ์ด์ง ๋งํฌ๋๋ฆฌ์คํธ๊ฐ ํฐ๋ฆฐ๋๋กฌ
์ธ์ง ํ๋จํ๋ ๋ฌธ์ ์
๋๋ค.
์๊ฐ ๋ณต์ก๋๊ฐ O(N)
์ด๋ฉด์ ๊ณต๊ฐ ๋ณต์ก๋๊ฐ O(1)
์ผ๋ก ๊ตฌํํ๊ธฐ ์ํด์ ์ฌ๊ท ํจ์๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
์ด๋ฅผ ์ํด ๋จผ์ ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด๋ฅผ ๊ตฌํ ๋ค์, ์ค์ ์์น๊น์ง ์ด๋ํด์ ํฐ๋ฆฐ๋๋กฌ ์ ๋ฌด๋ฅผ ํ๋จํฉ๋๋ค.
์ด๋ a[i] ~ a[j]
๊น์ง์ ๋งํฌ๋ ๋ฆฌ์คํธ๊ฐ ํฐ๋ฆฐ๋๋กฌ์ด๊ธฐ ์ํด์๋a[i+1] ~ a[j-1]
๊น์ง๊ฐ ํฐ๋ฆฐ๋๋กฌ์ด๊ณ a[i] == a[j]
์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฌ๋ฏ๋ก ๊ฐ๊ฐ์ ์ฌ๊ท ํธ์ถ ๊ณผ์ ์์ ๋ฐํ๊ฐ์ผ๋ก ํฐ๋ฆฐ๋๋กฌ ์ ๋ฌด
์ tail ๋
ธ๋
๋ฅผ ๋ฐํํด์
์ฌ๊ท ํธ์ถ ๊ณผ์ ์์ ๊ฐ๊ฐ์ ์๋ธ ๋ฆฌ์คํธ์ ์ ๋ ๋
ธ๋๋ฅผ ๋น๊ตํด์ค๋๋ค.
์ฝ๋
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @return {boolean}
*/
var isPalindrome = function (head) {
const len = getLength(head);
let half = len % 2 ? Math.floor(len / 2) : Math.floor(len / 2) - 1;
if (len === 0) return true;
const [answer] = dfs(len % 2 === 0, half, head, 0);
return answer;
};
function dfs(even, pivot, head, depth) {
if (depth === pivot) {
if (even) return [head.val === head.next.val, head.next.next];
else return [true, head.next];
}
const [subCheck, tail] = dfs(even, pivot, head.next, depth + 1);
return [subCheck && head.val === tail.val, tail?.next];
}
function getLength(head) {
if (!head) return 0;
return getLength(head.next) + 1;
}
๋ฐ์ํ
'๐ algorithm > leetcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
LeetCode 1011 - Capacity To Ship Packages Within D Days (Medium) (0) | 2021.03.04 |
---|---|
LeetCode 881 - Boats to Save People (Medium) (0) | 2021.03.04 |
LeetCode 309 - Best Time to Buy and Sell Stock with Cooldown (Medium) (0) | 2021.03.04 |
LeetCode 75 - Sort Colors (Medium) (0) | 2021.03.04 |
LeetCode 416 - Partition Equal Subset Sum (Medium) (0) | 2021.03.04 |
๐ฌ ๋๊ธ