문제
다솜이는 타임머신을 타고 8364년으로 갔다. 다행히 지구는 평화롭다.
다솜이는 2008년으로 돌아가기 전에 시계를 샀다.
다솜이는 시계를 볼 줄 모르기 때문에, 디지털 시계를 샀다.
디지털 시계는 HH:MM:SS와 같은 모양으로 시간을 나타내 준다. 그리고 앞에서부터 차례대로 HH는 시, MM은 분, SS는 초를 나타낸다.
다솜이는 8364년에는 2008년과 같은 방법으로 시간을 나타내는지 모른다.
2008년엔 시:분:초를 나타내는지만, 8364년엔 분:시:초로 나타낼지도 모른다.
다행히 시는 01부터 12, 분은 00부터 59, 초는 00부터 59를 나타낸다.
다솜이의 시계에 쓰여 있는 숫자가 주어졌을 때, 이 시간을 읽을 수 있는 가능한 방법의 수를 출력하는 프로그램을 작성하시오.
나타내는 시간이 같더라도, 시, 분, 초를 읽을 수 있는 위치가 다르면 다른 방법으로 센다.
또한, 방법의 수가 0일 수도 있다.
예를 들어, 21:23:01 은 21분 23초 01시 로 읽을 수도 있지만, 21초 23분 01시로 읽을 수도 있다.
https://www.acmicpc.net/problem/1440
입력
첫째 줄에 시간이 주어진다.
시간은 DD:DD:DD와 같은 꼴로 주어진다.
항상 8자리(:도 포함)로만 들어오며, D는 0-9 사이의 숫자이다.
출력
첫째 줄에 시간을 읽을 수 있는 가능한 방법의 수를 출력한다.
예제
# input
00:00:00
# output
0
# input
01:00:00
# output
2
# input
01:12:23
# output
4
# input
21:23:01
# output
2
문제 풀이
from itertools import permutations
time = map(int, input().split(":"))
cnt = sum(1 for a, b, c in permutations(time) if 1 <= a <= 12 and 0 <= b <= 59 and 0 <= c <= 59)
print(cnt)
permutations 함수는 itertools 모듈에서 제공되는 함수 중 하나로,
이 함수는 입력된 iterable(반복 가능한 객체)의 모든 순열을 반환합니다.
# input
from itertools import permutations
# iterable 객체 정의
iterable = ['A', 'B', 'C']
# permutations 함수를 사용하여 모든 순열 생성
perms = permutations(iterable)
# 순열을 출력
for perm in perms:
print(perm)
# output
('A', 'B', 'C')
('A', 'C', 'B')
('B', 'A', 'C')
('B', 'C', 'A')
('C', 'A', 'B')
('C', 'B', 'A')
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.