[프로그래머스]월간 코드 챌린지 시즌1- 풍선 터트리기, 파이썬
문제 프로그래머스 문제 링크 풀이 시간초과를 생각하지 않고 짜다 오래걸렸다(문제를 잘 읽고 풀자 ㅠ) 양 끝은 최후까지 남기는 것이 가능하다([1, 2] 라 했을 때 한 번 작은걸 터트릴 수 있는 기회로 1을 날려버리면 됨) 위 가정을 하기 위해서는 2개 남기기 전까지는 무조건 큰 수를 제거해야 함을 알 수 있다. 예시로 주어진 [-16, 27, 65, -2, 58, -92, -71, -68, -61, -33] 을 보자 따라서 27은 제거되어야 하기 때문에 양 극단이 될 수 없다 = -16보다 작은 수가 왼쪽 끝이 될 자격이 있고 오른쪽도 마찬가지 논리로 적용 [-16, ~], [-92, ~], [~, -92], [~, -71], [~, -68], [~, -61], [~, -33] 이 가능하다. 양쪽 방..
[알고리즘]비트마스크(BitMask), 비트조작 - 파이썬
비트마스크란? 비트마스크는 알고리즘이라기 보다는 알고리즘보다는 테크닉 중 하나 정수의 이진수 표현(비트, 0과 1의 binary digits)을 활용한 기법 states = [True, False, False, True, True, False, False, False, True, True] 등으로 상태 표현 가능# 길이가 5인 집합 { 0, 1, 2, 3, 4 } 있다고 하자 arr = [1, 1, 1, 1, 0] # 배열로 표현하면 비효율 { 1, 2, 3, 4 } => 11110 # 메모리 적게 차이하고 효율적 { 1, 2, 3, 4 } => 11110 => (2^4 * 1) + (2^3 * 1) + (2^2 * 1) + (2^1 * 1) = 30 # 10진수 표현 가능 코드를 간결하게 작성 가능하며..
[leetcode]140. Word Break II, 파이썬
문제 릿코드 문제 링크 풀이 난이도 : hard 풀이, dfs 주어진 wordDict을 돌며 해당 단어로 시작하면 재귀로 돌려줌 s가 빈 채로 인자로 넘어왔다는 뜻은 주어진 wordDict 배열 원소로 문장 s가 완성 가능하다는 뜻이므로 ret에 words 리스트를 더해줌 문제 조건에 맞춰 리턴 코드 class Solution: def wordBreak(self, s, wordDict): ret = [] self.dfs(s, wordDict, ret, []) for i, e in enumerate(ret) : ret[i] = ' '.join(e) return ret def dfs(self, s, wordDict, ret, words): if not s: ret.append(words) fo..