본문 바로가기
Algorithm/CodeUp

[CodeUp 기초 100제]1019 : [기초-입출력] 연월일 입력받아 그대로 출력하기(풀이 성공)

by 전봇대파괴자 2020. 10. 18.

 


입력:

연, 월, 일이 ".(닷)"으로 구분되어 입력된다.

 

 

출력:

입력받은 연, 월, 일을 yyyy.mm.dd 형식으로 출력한다.
(%02d를 사용하면 2칸을 사용해 출력하는데, 한 자리 수인 경우 앞에 0을 붙여 출력한다.)


내 코드:

a, b, c = input().split('.')

def ex1(a):
    x = int(a)
    if x < 1000:
        return str(x).zfill(4)
    else:
        return x
        
def ex2(b):
    y = int(b)
    if y < 10:
        return str(y).zfill(2)
    else:
        return y
        
print(ex1(a), ex2(b), ex2(c), sep='.')

 

 

또 다른 풀이:

a,b,c=input().split('.')

print('%04d' % int(a), end='.')
print('%02d' % int(b), end='.')
print('%02d' % int(c))

 

Comment: 입력한 년, 월, 일 날짜를 그대로 출력하는 문제입니다. 핵심은 원래라면 텅 비어있어야 할 앞자리에 0을 집어넣는 것입니다. 제가 찾은 방법은 zfill을 이용하는 것이었고, 더 간단한 방법으로는 "'%0Nd' % 출력할 숫자"가 있습니다. 여기서 N은 출력 시 표시할 자릿수를 의미합니다. 

 

zfill은 괄호 안에 출력 시 표시할 자릿수를 지정하고(ex. zfill(2), 위의 N과 같습니다.) 그 자릿수가 채워지지 않을 경우 0을 붙여 반환합니다.

예를 보겠습니다.

'2'.zfill(2) # 십의 자리까지 표시해 출력

>> '02'

'999'.zfill(4) # 천의 자리까지 표시해 출력

>> '0999'

주의할 점은, zfill은 자릿수를 지정하는 대상이 문자열(str)일 때만 작동하며, 정수형(int)일 경우 Attribute error가 납니다. 

그럼 '%0Nd'를 사용할 때의 예제를 보겠습니다.

n=2
print('%02d' % n) # 십의 자리까지 표시해 출력

>> 02

n=999
print('%04d' % n) # 천의 자리까지 표시해 출력

>> 0999

위의 방법보다 훨씬 간결하게 표현할 수 있습니다. 여기서 주의할 점은, 이 방법의 경우 위의 zfill과 반대로 자릿수를 지정하는 대상 혹은 변수가 정수형(int)인 경우에만 쓸 수 있다는 점입니다. 문자열일 경우 Type error가 발생합니다.