본문 바로가기
Algorithm/LeetCode

LeetCode - Largest Time for Given Digits

by HaningYa 2020. 9. 1.
728x90

 

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


문제

Given an array of 4 digits, return the largest 24 hour time that can be made.

The smallest 24 hour time is 00:00, and the largest is 23:59.  Starting from 00:00, a time is larger if more time has elapsed since midnight.

Return the answer as a string of length 5.  If no valid time can be made, return an empty string.

Example 1:
Input: [1,2,3,4]
Output: "23:41"

Example 2:
Input: [5,5,5,5]
Output: ""

Note:

  1. A.length == 4
  2. 0 <= A[i] <= 9

내 풀이

class Solution {
            var answer = ""

    func largestTimeFromDigits(_ A: [Int]) -> String {
        if !A.contains(0) && !A.contains(1) && !A.contains(2) {
            return ""
        }
       
        //HH : MM
        //00 ~ 24
        //00 ~ 59
        let arr: [Int] = A.sorted().reversed()
        let n = A.count
        let r = n
        let output : [Int] = Array(repeating:0 , count: r)
        let visited : [Bool] = Array(repeating: false, count: n)
        permutation(arr,output,visited,0,n,r)
        
        return answer
        
    }
    func permutation(_ arr : [Int],
                     _ output : [Int],
                     _ visited : [Bool],
                     _ depth : Int,
                     _ n : Int,
                     _ r : Int){
    var arr = arr
    var output = output
    var visited = visited

    if depth == r {
        // stack.append(output)
        if output[0] == 2 && output[1] < 4 && output[2] <= 5{
            print(output)
            answer = "\(output[0])\(output[1]):\(output[2])\(output[3])"
        }
        if output[0] < 2 && output[2] <= 5 {
            print(output)
            answer = "\(output[0])\(output[1]):\(output[2])\(output[3])"
        }
        return
    }
    if answer == "" {
          for i in 0..<n {
        if visited[i] != true {
            visited[i] = true
            output[depth] = arr[i]
            permutation(arr,output,visited,depth + 1,n,r)
            output[depth] = 0
            visited[i] = false
            }
        }
    }
  
    }
}
  • 0,1,2 가 없으면 맞는 조건이 없다. return ""
  • 일단 배열을 내림차순으로 정렬했다.
  • 그리고 배열 4개를 순서가 있게 뽑아 모든 경우의 수를 확인했다.
  • 그 중 조건이 맞는 첫번째 값을 정답으로 하였다. (내림차순 정렬했기 때문에)
  • 조건은 이러하다.
    • 2번째 자리 (HH:MM) 는 항상 6보다 작아야 한다.
    • 0번째 자리 (HH:MM)가 2이면 1번째 자리 (HH:MM) 는 항상 4보다 작아야 한다.

 

728x90

댓글