Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- bfs
- 프로그래머스
- 오블완
- softeer
- join
- Dynamic Programming
- 너비 우선 탐색
- DP
- group by
- 티스토리챌린지
- 소프티어
- Java
- Lv. 1
- Lv. 2
- dfs
- Python
- 동적계획법
- LEVEL 2
- programmers
- Lv. 0
- SQL
- select
- 깊이 우선 탐색
- 자바스크립트
- Lv. 3
- javascript
- 파이썬
- SQL 고득점 KIT
- C언어
- level 3
Archives
- Today
- Total
몸과 마음이 건전한 SW 개발자
프로그래머스 [Lv. 3] 가장 긴 팰린드롬 {언어 : JavaScript} 본문
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/12904?language=javascript
정답 코드
function solution(s)
{
let answer = 1;
const lenS = s.length;
// 홀수 펠린드롬
for (let i = 1; i < lenS; i++) {
let [l, r] = [i-1, i+1];
let currentLength = 1;
while (0 <= l && r < lenS) {
if (s[l] == s[r]) {
currentLength += 2;
l -= 1;
r += 1;
} else {
break;
};
};
if (currentLength > answer) {
answer = currentLength;
};
};
// 짝수 펠린드롬
for (let j = 0; j < lenS-1; j++) {
let [l, r] = [j, j+1];
let currentLength = 0;
while (0 <= l && r < lenS) {
if (s[l] == s[r]) {
currentLength += 2;
l -= 1;
r += 1;
} else {
break;
};
};
if (currentLength > answer) {
answer = currentLength;
};
};
return answer;
}
풀이 방법
- 홀수 펠린드롬과 짝수 펠린드롬을 나눈다.
- 중심 i, j를 기준으로 확장하면서 펠린드롬인지 확인한다.
- 현재 길이를 answer와 비교해서 큰 수를 치환한다.
- answer를 반환하면 끝!
느낀점
- 중심 확장 방법이라고 하는데 사실 그냥 해봤다.
- 중심을 기점으로 퍼져나가면서 탐색하면 될 것이라고 생각했다.
- s의 길이가 2500이라 O(N^2)도 실행 가능해 보였다.
'알고리즘' 카테고리의 다른 글
Softeer(소프티어) JavaScript 코딩 테스트 입력 방법 [INPUT] (1) | 2024.07.03 |
---|---|
Softeer [Level 3] 나무 조경 {언어 : Python} (0) | 2024.06.28 |
프로그래머스 [Lv. 3] 연속 펄스 부분 수열의 합 {언어 : Python} (0) | 2024.06.25 |
프로그래머스 [Lv. 3] 가장 먼 노드 {언어 : JavaScript} (0) | 2024.06.19 |
프로그래머스 [Lv. 3] 스티커 모으기 {언어 : Python} (0) | 2024.06.14 |