[백준] 10250. ACM 호텔

채연·2023년 1월 7일
0

baekjoon

목록 보기
4/26

10250. ACM 호텔

문제 링크


📖 문제 설명

  • 가장 최단 거리부터 시작하여 손님들을 입주 시키면 된다.
  • 엘리베이터는 거리로 포함 X
  • 옆 방 보다는 윗층이 더 가까움 -> 101, 201, 301, 102, 202, 302 이런 식으로 입주 시켜야 한다.

⌨️ 입력

  • 몇 번 입력을 할 것인지
  • 층 수, 방 수, 몇 번째 손님
  • 2 <-
  • 4, 2, 5 / 5, 2,7 <- 이런식

🖥️ 출력

  • 호수
  • 4층 2호면 : 402호, 14층 2호면 : 1402호

🦯 접근

  • 층 수를 구할 때에는 (손님 순서 % 층 수)를 이용하여 구한다.

    • 만약, 손님 순서가 5번째인데 층 수는 2층이라면 손님은 2층에 위치하는 방을 얻게 됨
    • 층 수의 개수만큼 올라간 후, 만약 층 수가 다 찼을 경우에 다음 방으로 넘어가서 새로 시작해야 하기 때문이다.

  • 방 수를 구할 때에는 ((손님 순서 / 방 수) + 1)를 이용하여 구한다.
    - 0호부터 시작하는 것이 아니므로 +1을 해줘야 우리가 구하는 방 수를 구할 수 있다.
    - 방 수는 층 수만큼 올라갔을 때 +1씩 더해지는 방식이므로 몫을 사용한다.

📄 처음으로 짠 코드

T = int(input())

for i in range(T):
    H, W, customer = map(int, input().split()) 
    first, last = 0, 0

    if(1<=customer<=W*H and 1<=H<=99 and 1<=W<=99):
        first = customer % H # 층
        last = int(customer / H + 1) # 호수

        print("{:02d}".format(first), end="")
        print("{:02d}".format(last))

-> format 함수를 이용하여 한 자리 숫자일 때는 앞에 0을 붙이고, 아닐 때는 두 자리 출력되도록 설정

🚨 오류들

  1. 층 수를 출력할 때는 한 자리 숫자일 때 그냥 한 자리만 출력하면 되는 것이었다!

    print("{:02d}".format(first), end="")
    # 에서
    
    print(first, end="")
    # 으로 변경
    
  2. 몫과 나머지의 최댓값, 즉 0이 나올 때 처리를 안 해줌
    - 계속 실패 뜨길래 원인을 못 찾았었는데, 이게 원인이었다..

    ```
        if(first == 0):
            first = H 
            # 정확하게 맞아 떨어질 때는 0이 되는데, 그때는 최대 값이므로 H 값으로 설정해준다.
            
            last = last -1 
            # 위와 같이 정확하게 맞아 떨어질 때는 다음 방으로 넘어가는 것이 아닌 해당 층의 끝방이므로 +1을 해주면 안 된다.
    
    ```

🔎 알게 된 내용

  • 몫과 나머지 사용할 때는 꼭 0일 때 처리 생각해주기!

  • 빈 자리에 0을 넣기 위해서 사용하는 format 형식은 {:02d}

    • 정수에 자리수를 표현할 때는 "0Nd"로 표현

      • N에는 원하는 자릿수 입력

      • 자릿수가 부족한 경우는 자동으로 0이 채워짐

        print("{:03d}".format(12)) # 012
        
        # 두 개 출력하고 싶을 때에는
        print("{0:03d}, {1:03d}".format(12345, 12) # 12345, 012
    • 소수점 자리수를 표현할 때는 "0.Nf"로 표현
      - N에는 소수점 아래 표시할 자릿수 입력

      • 남는부분은 자동으로 0이 채워짐
        print("{:0.2f}".format(123.456789)) # 123.45

📘 최종 코드

repeat = int(input())

for i in range(repeat):
    H, W, customer = map(int, input().split())
    first, last = 0, 0

    if(1<=customer<=W*H and 1<=H<=99 and 1<=W<=99):
        first = customer % H # 층
        last = int(customer / H + 1) # 호수

        if(first == 0):
            first = H
            last = last -1
            
        print(first, end="")
        print("{:02d}".format(last))
profile
Hello Velog

0개의 댓글