Conversation
doitchuu
approved these changes
Mar 5, 2026
Member
doitchuu
left a comment
There was a problem hiding this comment.
풀이에 진심이시군요... ✨
많이 배워갑니다..! 정석이네유
| } else { | ||
| set.add(char); | ||
| } | ||
| } |
Member
There was a problem hiding this comment.
오 Set으로 푸는 방식 너무 좋네요 👍
반복문 한번으로 해결되니 이 풀이 너무 좋은걸료
raejun92
approved these changes
Mar 5, 2026
Collaborator
raejun92
left a comment
There was a problem hiding this comment.
고생하셨습니다!
LongestPalindrome의 set로 접근한 아이디어는 정말 대박이군요
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
이렇게 풀었어요
1. Climbing Stairs
1) 복잡도 계산
시간 복잡도: O(n)
공간 복잡도: O(n)
2) 접근 아이디어
한 번에 1칸 또는 2칸 올라갈 수 있을 때, n칸을 올라가는 서로 다른 방법의 수를 구하는 문제다.
핵심 아이디어는,
로
f(n) = f(n-1) + f(n-2)라는 점화식이 만들어진다.어디선가 많이 본 공식이다. 피보나치 형태의 전형적인 DP의 기본 문제다.
3) 회고
외워두었던 공식이 있어 빠르게 풀 수 있었는데, 조금만 심화된 DP가 나오면 바로 못푼다.^^
일단 기본 공식은 외우고 있기 때문에 아쉬운 느낌이 들어 공간 복잡도를 조금 최적화할 수 있는 방법을 찾아보았다.
지금 작성한 풀이는
new Array(n + 1)의 공간을 생성한 뒤 집어넣기 때문에 O(n)의 공간복잡도를 가지고 있다.피보나치는 이전 두 값만 필요하다라는 것을 이용하면 공간을 O(1)로 최적화할 수 있다.
2. Longest Palindrome
1) 복잡도 계산
시간 복잡도: O(n)
공간 복잡도: O(n)
2) 접근 아이디어
주어진 문자열의 문자들을 재배열해서 만들 수 있는 가장 긴 palindrome 길이를 구하는 문제다.
재배열이란 키워드에서 얻을 수 있는 중요한 포인트는 문자 순서를 유지할 필요가 없다는 점이다.palindrome의 정의는 아래와 같다.
ex) abba, racecar, aa, aba
즉, 앞에서 읽어도 뒤에서 읽어도 같은 문자열로 구조적으로
pair pair pair [center] pair pair pair이란 공식을 세울 수 있다.이 문제 풀이의 핵심 아이디어는 문자열을 모두 구할 필요 없이 길이만 구하면 된다는 점이다.
예시로 보면,
s = "abccccdd" 일 때,
문자열 순회가 끝난 후 아래 형태를 가지게 된다.
cc -> +2
cc -> +2
dd -> +2
따라서, length = 6
하지만, Set 안에 a, b 2가지 종류가 1개씩 남아있다.
이 중 딱 한가지만 center에 위치할 수 있다.
따라서 마지막에 아래 코드를 작성해주면 최종 길이가 완성된다.
3) 회고
처음에는 괄호 문제처럼 Stack에서 push, pop하면서 풀면 되나 하는 생각이 들었는데, Stack은 순서가 중요하고, LIFO 구조여야 의미있으며, 바로 이전 요소와 매칭해야하는 특징이 있다. 그런데, 이 문제는 문자 순서는 고려 대상이 아니다. 그래서 Stack은 안된다. 그다음엔 문자 개수 카운팅에 자주 쓰이는 Map이 생각났다. 이걸로 풀면 문자열을 순회하며 각 문자 빈도를 Map에 기록하고 짝수냐 홀수냐에 따라 최종 length를 count하면 된다.
Map으로 푸는 문제 풀이
그런데, Stack이 계속 머릿속에 멤돌며 더 쉽게 풀 수 있는 방법을 고민하다가 Set을 사용하는 방법도 있다는 것을 떠올리게 되었다. Map을 이용한 방식은 많이 풀어보았으니 Set을 이용한 새로운 방법으로 풀어보기로 했다.
그리고 Set을 사용하면 Map을 사용했을 때보다 코드 작성을 1줄 더 줄일 수 있다.
이 3가지 조건을 다 작성해줘야하는 대신 첫번째, 세번째 조건만 따져주면된다.