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
- 피보나치
- Python
- k8s
- github
- Top-down
- Kotlin
- golang
- Backjoon
- easy
- Observer Pattern
- GCP
- cpu scheduling
- docker
- Dynamic Programming
- java
- BubbleSort
- 그리디
- KAKAO
- Singleton Pattern
- kubernetes
- GKE
- 알고리즘
- LeetCode
- Programmers
- Codility
- 백준
- 파이썬
- go
- mobaXTerm
Archives
- Today
- Total
To Be Developer
[LeetCode] 942. DI String Match Python 본문
import numpy as np class Solution(object): ''' Given a string S that only contains "I" (increase) or "D" (decrease), let N = S.length. Return any permutation A of [0, 1, ..., N] such that for all i = 0, ..., N-1: If S[i] == "I", then A[i] < A[i+1] If S[i] == "D", then A[i] > A[i+1] ''' def diStringMatch(self, S): # S의 길이를 구한다. ln = len(S) #li = list(np.arange(ln+1)) <- numpy의 arrange로도 배열 생성가능 # 0 ~ S.length 까지 일차원 배열로 생성 li = [i for i in range(ln+1)] # 결과값 저장 res = [] # S를 하나하나 분석하여 # I인지 D 인지 판단 for i in S: # I 이면 현재 가지고 있는 list에서 가장 작은 것을 pop if i == "I": res.append(self.getI(li)) # D 이면 list에서 가장 큰 원소를 pop() else : res.append(self.getD(li)) # S 길이보다 list의 길이가 더 길으므로 남은 마지막 # 원소 대입 res.append(li[0]) # 결과값 return return res def getI(self, li): return li.pop(0) def getD(self, li): return li.pop() if __name__ == "__main__": inData = "IDID" print(Solution().diStringMatch(inData))
'알고리즘 > LeetCode' 카테고리의 다른 글
[LeetCode] 1020. Partion Array Into Three Parts With Equal Sum Python (0) | 2019.03.26 |
---|---|
[LeetCode] 476. Number Complement (0) | 2019.03.25 |
[LeetCode] 557. Reverse Words in a String III (0) | 2019.03.24 |
[LeetCode] 561. Array Partition I (0) | 2019.03.24 |
[LeetCode] 28. Implement strStr() (0) | 2019.03.24 |