python/연습문제 풀이

[백준] python 2884번: 알람 시계

연정양 2022. 10. 20.

목차

    [백준] python 2884번: 알람 시계

     

    2884번: 알람 시계

    상근이는 매일 아침 알람을 듣고 일어난다. 알람을 듣고 바로 일어나면 다행이겠지만, 항상 조금만 더 자려는 마음 때문에 매일 학교를 지각하고 있다. 상근이는 모든 방법을 동원해보았지만,...

    www.acmicpc.net

    무려 6번을 틀리고 7번째에 성공한 문제

    칠전팔기 할 뻔 했는데 아쉽구만..(?)

     

    입력값을 받고, 

    H,M = map(int,input().split())

    다중 if를 사용하여

    1) 시간과 분이 true값을 갖도록 설정 (0<=H<=23, 0<=M<=59)

        - 입력된 값보다 45분 빠른 M을 얻기

    if 0 <= H <= 23 and 0 <= M <= 59:
        M = M - 45

    2)  45분 빠른 M값에 대하여 

        (1) M이 0보다 작다면 H는 1시간 줄어들어야 함

        (2) M을 음수값 만큼 60분에서 더하여, 적절한 시간값을 갖는 M을 도출(60 내에서)

             ex) 45분 빠른 m값이 -15라면, 60분에서 -15를 더해주면 45분이라는 값이 나옴 

    if M < 0:
        H = H - 1
        M = 60 + M

    3) 2번의 값을 도출했을 때, H가 0보다 작다면

        - 역시 24시간에서 음수값을 더해서 적절한 H값 도출

    if H < 0:
        H = 24 + H

    4) 값 출력

    print(H, M)

    그리하여 정답은 

    H,M = map(int,input().split())
    if 0 <= H <= 23 and 0 <= M <= 59:
        M = M - 45
        if M < 0:
            H = H - 1
            M = 60 + M
            if H < 0:
                H = 24 + H
    
    print(H, M)

     

    #아래 코드는 최초 시도한 것

    H = int(input())
    M = int(input())
    FM = FH = 0
    if 0 <= H <= 23 and 0 <= M <= 59:
        FM = M - 45
        if FM > 0:
            FH = H
        else:
            FH = H - 1
            FM = 60 + FM
    if FH < 0:
        FH = 24 + FH
    
    print(FH, FM)

     

    제일 처음에 제출한 것.

    일단 문제에서 요구하는 "한 줄에 입력함"을 처리하지 않았기에 해당 부분 수정했고,

    0으로 초기화한 fm,fh변수에 넣어 계산을 했는데

    여러 번 시도하다 보니 굳이 변수 설정 없이 바로 입력값으로 계산하여 h,m을 결과로 내는 것이

    더 간편하고 깔끔하다는 해답을 얻을 수 있었다. (변수 설정은 괜한 수고를 하는 것이었다.)

     

    그리고 가장 큰 문제였던 

    fm이 0보다 큰 부분. (m이 0보다 클 경우)

    0보다 큰 경우를 굳이 설정하지 않아도,

    0보다 작은 경우만 if로 설정한다면 

    '그 외의 값'은 알아서 m= m-45로 처리되므로

    없어도 되는 부분이었다. 

     

    이걸 알아내기까지 시도했던 몇 가지 코드를 남긴다.(다 오답임)

    H,M = map(int,input().split())
    FM = FH = 0
    if 0 <= H <= 23 and 0 <= M <= 59:
        FM = M - 45
    if FM > 0:
        FH = H
    else:
        FH = H - 1
        FM = 60 + FM
    if FH < 0:
        FH = 24 + FH
    
    print(FH, FM)
    H,M = map(int,input().split())
    FM = FH = 0
    if 0 <= H <= 23 and 0 <= M <= 59:
        FM = M - 45
    if FM < 0:
        FH = H - 1
        FM = 60 + FM
    if FH < 0:
        FH = 24 + FH
    
    print(FH, FM)

    쓸데없이 if를 집어넣고 한 줄로 처리를 하고 고군분투 했던 현장..

    이렇게 모아두고 보니 최종 결과물이 훨씬 합리적이고 깔끔하다.

    'python > 연습문제 풀이' 카테고리의 다른 글

    [백준] python 10950 : A+B -3  (0) 2022.10.24
    [백준] python 10807 : 개수 세기  (0) 2022.10.24
    [백준] python 3003번  (0) 2022.10.18
    [백준] python 10430번  (0) 2022.10.18
    (연습문제) 사용자 정의 class  (2) 2022.09.30

    댓글