[프로그래머스] 가장 긴 팰린드롬
📖 문제
✏️ 나의 풀이
홀수일 경우와 짝수일 경우를 각각 나누어 비교했다.
홀수일 경우
function solution(s) {
const answer1 = new Array(s.length).fill(1);
for (let i = 1; i < s.length; i++) {
for (let j = 1; i + j < s.length && i - j >= 0; j++) {
if (s[i - j] === s[i + j]) answer1[i] += 2;
else break;
}
}
}
- answer1은 해당 인덱스부터 양옆의 문자를 비교했을 때 팰린드롬이 되는 문자열의 길이를 저장할 배열이다.
- 정답이 홀수일 경우만 저장할 것이기에 모든 배열의 값을 1로 초기화해주었다.
- 반복문을 돌리면서
i-j
와i+j
가 같으면 answer1의 i번째 인덱스 값을 2증가시켜주었다.
짝수일 경우
function solution(s) {
const answer2 = new Array(s.length).fill(0);
for (let i = 0; i < s.length; i++) {
if (s[i] !== s[i + 1]) continue;
answer2[i] = 2;
for (let j = 1; i + j + 1 < s.length && i - j >= 0; j++) {
if (s[i - j] === s[i + j + 1]) answer2[i] += 2;
else break;
}
}
}
- answer2는 해당 인덱스부터 양옆의 문자를 비교했을 때 팰린드롬이 되는 문자열의 길이를 저장할 배열이다.
- 정답이 짝수일 경우만 저장할 것이기에, 모든 배열의 값을 0으로 초기화해주었다.
- 반복문을돌리면서
i
번째 인덱스의 바로 오른쪽i+1
번째 인덱스와 값이 같을 경우 answer[i]에 2를 할당해주고, 그렇지 않을 경우continue
문이 실행되도록 했다. i-j
와i+j+1
가 같으면 answer2의 i번째 인덱스 값을 2증가시켜주었다.
반환값
function solution(s) {
return Math.max(...answer1, ...answer2);
}
- Math 객체의 max 메소드를 이용해 두 배열에서 가장 큰 값을 반환하도록했다.
👩💻 코드
function solution(s) {
const answer1 = new Array(s.length).fill(1);
const answer2 = new Array(s.length).fill(0);
for (let i = 1; i < s.length; i++) {
for (let j = 1; i + j < s.length && i - j >= 0; j++) {
if (s[i - j] === s[i + j]) answer1[i] += 2;
else break;
}
}
for (let i = 0; i < s.length; i++) {
if (s[i] !== s[i + 1]) continue;
answer2[i] = 2;
for (let j = 1; i + j + 1 < s.length && i - j >= 0; j++) {
if (s[i - j] === s[i + j + 1]) answer2[i] += 2;
else break;
}
}
return Math.max(...answer1, ...answer2);
}
댓글남기기