다이나믹 프로그래밍 - Leetcode 139
·
알고리즘 문제로 공부하기
문제Leetcode 139 - Word Break는 주어진 문자열 s가 wordDict에 포함된 단어들로 완전히 분할될 수 있는지 여부를 판단하는 문제다. 단어는 사전에서 여러 번 사용할 수 있으며, 모든 단어를 사용할 필요는 없다.문제 제약 조건1 1 1 s와 wordDict[i]는 소문자 영문자로만 구성된다.wordDict의 모든 문자열은 고유하다.예제 분석예제 1Input: s = "leetcode", wordDict = ["leet","code"]Output: true"leetcode"는 "leet"와 "code"로 분할 가능하다. 두 단어 모두 wordDict에 존재하므로 결과는 true다.예제 2Input: s = "applepenapple", wordDict = ["apple","pen"]O..
슬라이딩 윈도우 - Leetcode 03
·
알고리즘 문제로 공부하기
문제주어진 문자열에서 문자의 중복을 허용하지 않는 연속된 부분 문자열 중 가장 긴 길이를 구해라. 해결 과정0 문자열 길이의 범위를 확인했을 때 브루트 포스 방식이 원하는 해결 방식은 아니라는 결론이 나온다. 하지만 적어도 문자열의 각 문자들을 한 번씩은 살펴봐야 할 테니 O(n)의 방식이 있는지 생각해 봐야 한다. 아이디어를 얻기 위해 문제에서 얻을 수 있는 단서는 다음과 같다.연속된 부분 문자열부분 문자열이 서로 떨어져도 되는 경우라면 문제 해결 방법이 더욱 까다로워 지겠지만 연속된 부분 문자열이다. 연속된 부분 문자열(윈도우)을 관리(슬라이딩)하면서 최장 부분 문자열의 길이를 찾아내면 된다. `abcabcbb` 를 예시로 생각해보자. 앞에서부터 문자 하나씩 반복하여 살펴보자.a는 그 자체로 합리적..