[LeetCode] 401. Binary Watch (Python3)

호이·2021년 12월 19일
post-thumbnail

요약

  • Backtracking, Easy
  • 입력: 불이 들어올 번호의 수
  • 출력: "시간:분" 형식으로 이루어진 리스트
  • 이진법 숫자로 이루어진 시계! 시간은 8, 4, 2, 1 조합으로 (AM/PM은 따로 표기하므로 0~11), 분은 32, 16, 8, 4, 2, 1 조합으로 (0~59) 표현한다. 시간은 번호에 불이 들어오는지의 여부로 파악한다.

풀이

내 풀이

class Solution:
  def readBinaryWatch(self, turnedOn: int):
    result = []
    for i in range(turnedOn + 1):
      hours = self.getCombination(i, "h")
      mins = self.getCombination(turnedOn - i, "m")
      for h in hours:
        for m in mins:
          if (len(m) == 1):
            m = "0" + m
          result.append(h + ":" + m)
    return result
  • 사실상 메인 함수, getCombination 함수에서 도출한 조합으로 이중 for문을 돌며 h:m을 조합하고 배열을 반환
  def getCombination(self, num: int, keyword: str):
    hourList = []
    minList = []
    if (keyword == "h"):
      if (num < 4):
        for a in range(2):
          for b in range(2):
            for c in range(2):
              for d in range(2):
                if (a + b + c + d) == num:
                  sum = a * 8 + b * 4 + c * 2 + d
                  if sum < 12:
                    hourList.append(str(sum))
      return hourList
    elif (keyword == "m"):
      if (num < 6):
        for a in range(2):
          for b in range(2):
            for c in range(2):
              for d in range(2):
                for e in range(2):
                  for f in range(2):
                    if (a + b + c + d + e + f) == num:
                      sum = a * 32 + b * 16 + c * 8 + d * 4 + e * 2 + f
                      if sum < 60:
                        minList.append(str(sum))
      return minList
  • getCombination 함수는 num개의 키패드를 누를 수 있음을 제약조건으로 가질 때, 조합 가능한 시간 또는 분을 배열로 반환한다. 문제에서 시간과 분에 따라 키패드가 다르므로 keyword로 h 또는 m을 입력받는다.

다른 사람의 풀이

def readBinaryWatch(self, num):
    return ['%d:%02d' % (h, m)
            for h in range(12) for m in range(60)
            if (bin(h) + bin(m)).count('1') == num]

이런 킹받는 이진법 시계가... 디자인만 요즘 감성으로 잘 빠진다면... 은근한 간지템으로 유행할 수 있을지도...?

profile
매일 부활하는 개복치

0개의 댓글