-
https://leetcode.com/problems/largest-time-for-given-digits/
푸는데 걸린 시간: 40분 처음엔 핵쉬운 문제인줄 알았다.. 난이도 easy 그러나 accpetance 37% 음...?
첫 시도 : 코드가 상당히 원초적이다;; ㅠㅠ
class Solution: def largestTimeFromDigits(self, A: List[int]) -> str: res = [] A = sorted(A) #시간 수 만들기 if 2 in A: A.remove(2) candi = [i for i in A if i < 4] if not candi: return "" num = max(candi) A.remove(num) res.extend([2,num]) elif 1 in A: A.remove(1) num = max(A) A.remove(num) res.extend([1,num]) elif 0 in A: A.remove(0) num = max(A) A.remove(num) res.extend([0,num]) else: return "" #분 수 만들기 if A[0] > 5 and A[1] > 5: return "" else: if A[1] >5: res.extend([A[0],A[1]]) else: res.extend([A[1],A[0]]) return "{0}{1}:{2}{3}".format(res[0], res[1], res[2], res[3])
심지어 아래 케이스가 틀린다.
Input: [2,0,6,6] Output: "" Expected: "06:26"
이건 내 생각대로 풀면 할 수 없다. 그냥 경우의 수를 다 구해야겠다. 이전에 python에서 순열 구하는 라이브러리가 있는게 생각났다.
순열을 이용해서 모든 수를 구하고
1. 60이 넘는 수는 시도 분도 될 수 없으므로 제거하고
2. 시간의 후보자를 구하고 (24보다 작은)
3. 시간의 후보자들을 기준으로 분을 구한다. 이때, 시간에서 이미 사용한 숫자를 사용하지 않도록 Counter로 비교한다.
from itertools import permutations from collections import Counter class Solution: def largestTimeFromDigits(self, A: List[int]) -> str: A = [str(i) for i in A] candiate = sorted( [i for i in list( map(''.join, permutations(A, 2)) ) if int(i) < 60],reverse = True) hourCandi = sorted([i for i in candiate if int(i) < 24], reverse = True) check = Counter(A) for hour in hourCandi: for cand in candiate: if check == Counter(hour+cand): return "{0}:{1}".format(hour,cand) return ""
'2020년 > 코테' 카테고리의 다른 글
[코테 연습] Relative Sort Array (0) 2020.09.09 [코테 연습] Sum of Root To Leaf Binary Numbers (0) 2020.09.09 [코테 연습] Delete Node in a BST Python (0) 2020.09.01 [코테 연습] Pancake Sorting (0) 2020.08.31 [코테 연습] Find Right Interval Python (0) 2020.08.30