위지원의 데이터 일기 🐈
Home
  • 분류 전체보기 (563)
    • ✎ 2025년 (4)
    • 2024년 (16)
    • 2023년 (6)
    • 2022년 (35)
      • Developement (22)
      • Error (9)
    • 2021년 (68)
      • ERROR (9)
      • 알고리즘 (11)
      • 개발공부 (21)
      • Data (15)
      • 21.下 (12)
    • 2020년 (164)
      • 코테 (84)
      • Development (29)
      • 정처기 (41)
    • 2019년 (27)
    • 2018년 (89)
      • English Speaking (8)
      • Error (12)
      • C, Java, FileSystem (13)
      • DataBase (15)
      • Java (2)
      • 지식 (16)
      • Go (3)
      • spark (9)
      • 영어 (5)
      • 알고리즘 (6)
    • 2017년 (143)
      • Error (17)
      • machine learning (16)
      • Spark (20)
      • Database (19)
      • Python (17)
      • Spring (9)
      • etc. (10)
      • 백준 (5)
      • Google Platform (12)
      • web Development (7)
      • Docker (3)
      • Linux (8)
Home
  • 분류 전체보기 (563)
    • ✎ 2025년 (4)
    • 2024년 (16)
    • 2023년 (6)
    • 2022년 (35)
      • Developement (22)
      • Error (9)
    • 2021년 (68)
      • ERROR (9)
      • 알고리즘 (11)
      • 개발공부 (21)
      • Data (15)
      • 21.下 (12)
    • 2020년 (164)
      • 코테 (84)
      • Development (29)
      • 정처기 (41)
    • 2019년 (27)
    • 2018년 (89)
      • English Speaking (8)
      • Error (12)
      • C, Java, FileSystem (13)
      • DataBase (15)
      • Java (2)
      • 지식 (16)
      • Go (3)
      • spark (9)
      • 영어 (5)
      • 알고리즘 (6)
    • 2017년 (143)
      • Error (17)
      • machine learning (16)
      • Spark (20)
      • Database (19)
      • Python (17)
      • Spring (9)
      • etc. (10)
      • 백준 (5)
      • Google Platform (12)
      • web Development (7)
      • Docker (3)
      • Linux (8)
블로그 내 검색
포트폴리오

위지원의 데이터 일기 🐈

데이터를 사랑하고 궁금해하는 기록쟁이입니다! 😉 Super Data Girl이 되는 그날까지🏃‍♀️ 화이팅!

  • 🖥 깃블로그
  • 🌍 위키원
  • 📑 내맘대로 스크랩
  • 💌 메일
  • 2020년/코테

    [코테 연습] Largest Time for Given Digits Python

    2020. 9. 2. 14:34

    by. 위지원

     

    https://leetcode.com/problems/largest-time-for-given-digits/

     

    Largest Time for Given Digits - LeetCode

    Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

    leetcode.com

     

    푸는데 걸린 시간: 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

    잠깐만요~! 읽으신김에 이런 글들은 어떠세요? 👀

    • [코테 연습] Relative Sort Array 2020.09.09
    • [코테 연습] Sum of Root To Leaf Binary Numbers 2020.09.09
    • [코테 연습] Delete Node in a BST Python 2020.09.01
    • [코테 연습] Pancake Sorting 2020.08.31
    맨 위로
전체 글 보기
Tistory 로그인
Tistory 로그아웃
로그아웃 글쓰기 관리

열정! 열정! 열정! 🔥

Designed by Nana
블로그 이미지
위지원
데이터 엔지니어로 근무 중에 있으며 데이터와 관련된 일을 모두 좋아합니다!. 특히 ETL 부분에 관심이 가장 크며 데이터를 빛이나게 가공하는 일을 좋아한답니다 ✨

티스토리툴바

티스토리툴바