Algorithm

[백준][python]18312 시각

soduddl1 2023. 3. 4. 22:40

문제

https://www.acmicpc.net/problem/18312

소스코드1

import sys
input = sys.stdin.readline


if __name__ == "__main__":
    n,k = map(int,input().split())
    res = 0
    for h in range(n+1):
        if h < 10:
            hh = '0' + str(h)
        else:
            hh = str(h)
        for m in range(60):
            if m < 10:
                mm = '0' + str(m)
            else:
                mm = str(m)
            for s in range(60):
                if s < 10:
                    ss = '0' + str(s)
                else:
                    ss = str(s)
                if str(k) in (hh+mm+ss):
                    res +=1
    print(res)

소스코드2

import sys
input = sys.stdin.readline


if __name__ == "__main__":
    n,k = map(int,input().split())
    res = 0
    for h in range(n+1):
        if h < 10:
            hh = '0' + str(h)
        else:
            hh = str(h)
        if str(k) in hh:
            res += (60*60)
            continue
        for m in range(60):
            if m < 10:
                mm = '0' + str(m)
            else:
                mm = str(m)
            if str(k) in mm :
                res += 60
                continue
            for s in range(60):
                if s < 10:
                    ss = '0' + str(s)
                else:
                    ss = str(s)
                if str(k) in ss:
                    res +=1
    print(res)

 

설명

00:00:00 ~ N:00:00 을 시,분,초로 나누어서 K가 포함되면 +1을 해주도록 하였다.

처음엔 그냥 5:13:14를 51314 이런 숫자로 생각해서 숫자로 처리해주었는데 K = 0 일 수 도 있다는 문제의 조건을 놓쳐서 10 이하인 경우 0을 추가해주어서 문자로 바꾼 후 K가 포함되어있는지 체크해줬다.

 

소스코드2는 그냥 시에서 해당 숫자가 포함되면 나머지 분, 초는 무조건 포함이므로 60 * 60을 해주고 넘어가고

분에 해당하는 숫자가 나오면 초가 무조건 포함이므로 60을 더해주고 넘어갔다.

 

시간이 24ms 정도 줄었다.