반응형
문제
10진수 n 이 주어지면 이 수를 최소의 deci-binary, 즉 1과 0으로 이루어진 수(10, 11, 1 등, 0으로 시작하면 안됨), 로 구성할 수 있는지 개수를 return 해야 한다. n = 32 라면 10 + 11 + 11 = 32 로 최소 3개의 deci-binary 로 구성할수 있기 때문에 답은 3이 된다.
풀이
문제는 이상하게 복잡하기만 답은 생각보다 간단하다. 첫번째풀이 방벙은 주어지는 수 n 가 string 이기때문에 하나의 list 로 인식해서 각자리의 수를 모두 확인하고, 그 수중에 가장 큰수를 답으로 하면 된다. 예를 들어 n = 12532 라면 n[2] = 5로 가장 큰수는 5이기 때문에 답은 5개 된다. (어차피 1씩 으로 나눠야 하기 때문에 가장 큰 수 기분으로 답이 나오게 된다.)
class Solution:
def minPartitions(self, n: str) -> int:
maxNum = 0
for i in range(len(n)):
if int(n[i]) > maxNum:
maxNum = int(n[i])
return maxNum
그래서 위와 같이 솔루션을 제출했습니다만, 다른 사람 코드를 보다가 충격적인 것을 보게 되었다.
class Solution:
def minPartitions(self, n: str) -> int:
return int(max(n))
말로만 듣던 한줄 솔루션. max(n) 이라는 것은 n 의 list 에서 각 요소들의 처음 글자의 순서를 찾아 가장 큰것을 return 해준다. 그러면 자연스럽게 여기서는 n 의 각 자리에서 가장 큰수가 있는 것을 return 해줄것이다. 그리고 깔끔하게 다시 int() 로 만들어서 return.
첫번째 솔루션은 풀이시간이 204ms 인데 반해 아래 솔루션은 32ms 으로 시간단축이 엄청나다.
문제는 어렵지 않았지만 시간단축은 어렵다.
반응형
'python' 카테고리의 다른 글
오프라인에서 python package 설치하기 (0) | 2021.10.25 |
---|---|
[PYTHON] Listnode 생성, 추가, 조작 (leetnode: Add Two Numbers) (0) | 2021.04.05 |
[PYTHON] list 에서 for 문 2개 돌리기 (i, j) (leetcode: number of good pairs) (0) | 2021.04.02 |
[PYTHON] list(array) 선언의 두가지 방법 (leetcode: Shuffle the Array) (0) | 2021.04.02 |
[PYTHON] leetcode Subrectangle Queries (mid) 문제풀이 (0) | 2021.03.19 |
댓글