문제
콜론으로 구분된 세 수가 주어질 때, 이를 재배열하여 유효한 시각(HH:MM:SS, 12시간제)을 만들 수 있는 경우의 수를 구하라.
입력
첫째 줄에 콜론으로 구분된 세 정수가 주어진다.
출력
유효한 시각의 경우의 수를 출력한다.
예제
| 입력 | 출력 |
|---|---|
3:2:1 | 6 |
풀이
세 수의 모든 순열(최대 6가지)을 생성하여, 시(112), 분(059), 초(0~59) 범위를 만족하는 조합을 세면 된다.
- 입력을 콜론으로 분리하여 세 수를 얻는다
- 3중 반복문으로 세 수의 모든 순열(i, j, k가 모두 다른 경우)을 생성한다
- 각 순열에서 첫 수가 1
12, 나머지가 059 범위인지 확인한다 - 조건을 만족하는 순열 수를 카운트한다
핵심 아이디어: 세 수의 순열은 최대 6가지뿐이므로 모두 확인해도 O(1)이다.
코드
t_machine = list(map(int, input().split(':')))
hour = [h for h in range(1, 13)]
min_sec = [ms for ms in range(60)]
result = 0
for i in range(3) :
for j in range(3) :
for k in range(3) :
if i != j and j != k and k != i :
if t_machine[i] in hour and t_machine[j] in min_sec and t_machine[k] in min_sec :
result += 1
print(result)복잡도
- 시간: O(1)
- 공간: O(1)