본문 바로가기
python

[PYTHON] string 을 list 로 사용하는법, max(string) 사용법 (leetcode: Partitioning Into Minimum Number Of Deci-Binary Numbers)

디지털노마드 2021. 4. 2.
반응형

문제

 

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 으로 시간단축이 엄청나다. 

 

 

문제는 어렵지 않았지만 시간단축은 어렵다. 

 

 

반응형

댓글