본문 바로가기
알고리즘/백준 - 파이썬

백준) 10250번 ACM 호텔 문제 (파이썬)

by AI Sonny 2022. 6. 13.
728x90

문제)

H = 6 이고 W = 12 인 H × W 호텔을 간략하게 나타낸 그림

방 번호는 YXX 나 YYXX 형태인데 여기서 Y 나 YY 는 층 수를 나타내고

 

XX 는 엘리베이터에서부터 세었을 때의 번호를 나타낸다.

 

즉, 그림 1 에서 빗금으로 표시한 방은 305 호가 된다.

 

손님은 엘리베이터를 타고 이동하는 거리는 신경 쓰지 않는다.

 

다만 걷는 거리가 같을 때에는 아래층의 방을 더 선호한다.

 

예를 들면 102 호 방보다는 301 호 방을 더 선호하는데,

 

102 호는 거리 2 만큼 걸어야 하지만 301 호는 거리 1 만큼만 걸으면 되기 때문이다.

 

같은 이유로 102 호보다 2101 호를 더 선호한다.

 

여러분이 작성할 프로그램은 초기에 모든 방이 비어있다고 가정하에

 

이 정책에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산하는 프로그램이다.

 

첫 번째 손님은 101 호, 두 번째 손님은 201 호 등과 같이 배정한다.

 

그림 1 의 경우를 예로 들면, H = 6이므로 10 번째 손님은 402 호에 배정해야 한다.

T = int(input())

for i in range(T):
    a, b, c = map(int,input().split())
    num = c // a +1
    floor = c % a
    if c % a == 0:
        num = c//a
        floor = a
    print(f'{floor*100+num}')

이번 문제는 방배정 문제이다. 일단 T(테스트 데이터)를 입력값으로 넣었고,

 

for 문을 통해 range(T)까지 반복하도록  for 문을 사용 후  a, b, c의 입력값을 받았다.

 

이 후 c // a +1을 통해 호를 도출해내고, c % a를 통해 층을 도출해낸다.

 

그리고  if 문을 이용하여 c % a == 0이면 c // a를 통해 호수가 되고, a는 층이 된다.

 

마지막으로 floor에 100을 곱하고 num을 더하면 방번호가 출력이 된다.

 

점점 갈수록 수학적 사고가 많이 부족한 느낌이 든다. 수학에 대한 기본 개념을 잘 쌓자!

 

이해가 안되시거나 틀린 정보는 댓글로 알려주시면 감사하겠습니다!

728x90

댓글