Post
경고(백준 3029번) | Gihun Son

경고(백준 3029번)

문제

창영마을에서 정인이의 반란은 실패로 끝났다. (3028번)

테러리스트로 변신한 정인이는 창영마을에 경고를 하려고 한다.

사실 정인이는 창영마을에서 제일 착한사람이다. 따라서, 사람들을 다치지 않게하려고 한다.

유튜브에서 폭발에 대한 동영상을 찾아보다가, 그는 나트륨을 물에 던지면 폭발한다는 사실을 알게 되었다.

정인이는 창영마을의 중심을 지나는 “강산강” 근처에 숨어있다가, 나트륨을 위의 동영상처럼 물에 던질 것이다.

현재 시간과 정인이가 나트륨을 던질 시간이 주어졌을 때, 정인이가 얼마나 숨어있어야 하는지 구하는 프로그램을 작성하시오. (정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.)

Untitled

나의 풀이(풀이 참고)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
current_time=list(map(int,input().split(':')))
throw_time=list(map(int,input().split(':')))
hh,mm,ss=0,0,0
if current_time[2]>throw_time[2]:
    throw_time[1]-=1
    throw_time[2]+=60
    ss=throw_time[2]-current_time[2]
else:
    ss=throw_time[2]-current_time[2]
if current_time[1]>throw_time[1]:
    throw_time[0]-=1
    throw_time[1]+=60
    mm=throw_time[1]-current_time[1]
else:
    mm=throw_time[1]-current_time[1]
if current_time[0]>throw_time[0]:
    throw_time[0]+=24
    hh=throw_time[0]-current_time[0]
else:
    hh=throw_time[0]-current_time[0]
if hh==0 and mm==0 and ss==0:
    hh+=24
hh=str(hh).zfill(2)
mm=str(mm).zfill(2)
ss=str(ss).zfill(2)

print(f'{hh}:{mm}:{ss}')
  • 아무리 생각해도 맞는 것 같은데 틀렸다고 나와서, 풀이를 참고했다.
  • 알고 보니, “정인이는 적어도 1초를 기다리며, 많아야 24시간을 기다린다.” 이 부분이 중요했다.
  • 즉, 시간이 같으면 00:00:00이 아닌, 24:00:00이 나와야 한다는 것
  • 해당 코드를 추가해주었고, 정답 처리되었다.
  • 이 때, 0을 채우는 zfill()을 몰라서 참고하여 풀었다.

다른 사람 풀이

1
2
3
4
5
6
7
8
9
h1, m1, s1 = map(int, input().split(':'))
h2, m2, s2 = map(int, input().split(':'))
t1 = h1*60*60 + m1*60 + s1
t2 = h2*60*60 + m2*60 + s2
t = t2 - t1 if t2 > t1 else t2-t1+24*60*60
h = t//60//60
m = t//60 % 60
s = t%60
print("%02d:%02d:%02d" % (h, m, s))
  • 위처럼 모든 시간을 ‘sec’로 변환하여 푸는 방법도 있었다.

추가적인 문법

  • 0채우기
    • zfill(): zfill()의 주의할 점은 “문자열”앞에 채운다는 것이다.
    1
    2
    3
    4
    
      p='44'
      a=p.zfill(2) #a는 '44'
      b=p.zfill(3) #b는 '044'
      c=p.zfill(4) #c는 '0044'
    
    • rjust(): rjust()는 0이 아닌 다른 문자열을 채울 수 있다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
      string_number = "1"
        
      a = string_number.rjust(2, "a")
      b = string_number.rjust(4, "b")
        
      print(a)
      print(b)
        
      >>> a1
      >>> bbb1
    
This post is licensed under CC BY 4.0 by the author.