[PYTHON/파이썬] 10250 ACM호텔 - zfill() 0으로 자릿수 채우는 법

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

     

    10250번: ACM 호텔

    프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

    www.acmicpc.net

    문제 풀이

    • h를 이용해 푼다.
    • 층은 n를 h으로 나눈 나머지이다. 만약 나누어 떨어진다면 그대로 h를 반환한다.
    • 호수는 n을 h로 나눈 몫에 1를 더한 값이다. 만약 나누어 떨어진다면 그대로 몫을 반환한다.

    solution - 실패/출력형식

    import sys
    T = int(sys.stdin.readline().strip())
    for _ in range(T):
      h,w,n = map(int, sys.stdin.readline().strip().split())
      buliding, unit = [str(h), str((n//h))] if n%h == 0 else[ str(n%h),str((n//h)+1)]
    
      print(f'{buliding}0{unit}')

    틀린 이유

    • 원인
      • h = 10, w = 10, n = 100일때 기대값은 1010이지만 출력값은 10010이 나온다.
      • 층과 호수의 몇 자리인지 상관없이 0을 구분으로 넣었기 때문이다.
    • 해결
      • 층은 그대로 출력하고 호수는 zfill(2)를 활용하여 일의 자리 수일때 앞에 0을 붙여 출력하게 한다.

    solution - 최종코드/성공

    import sys
    T = int(sys.stdin.readline().strip())
    for _ in range(T):
      h,w,n = map(int, sys.stdin.readline().strip().split())
      buliding, unit = [str(h), str((n//h))] if n%h == 0 else[ str(n%h),str((n//h)+1)]
    
      print(buliding,unit.zfill(2),sep='')

    0으로 자릿수 채우기 - zfill()

    str.zFill(전체 자리 수)
    print('5'.zFill(5)) # 00005

    댓글