BJ10250_ACM_호텔_python

1. 문제링크

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

2. 풀이 전 계획과 생각

< 정보 정리 >

1) 입력값: 테스트 케이스 T, Height H, Width W, Guest number G
2) 출력값: 방 호수 N
3) 제약조건: 1 <= H,W <= 99, 1 <= G <= H x W
4) 예외케이스: 없음

< 공통 로직 >

  • G > H 일때는 H 값을 빼줄때 방 호수를 올려준다.
  • G < H 일때는 G, H 차이값 만큼 층수를 올려준다.

3. 풀이

def find_acm_hotel_room():
  t = int(input("Enter the number of test cases:"))
  result = [];
  for i in range(t):
      height = int(input(f"{i + 1} Enter height: "))
      if height > 99 or height < 1:
        print("Height must be between 1 and 99 inclusive.")
        return
      width = int(input(f"{i + 1} Enter width: "))
      if width > 99 or width < 1:
        print("Width must be between 1 and 99 inclusive.")
        return
      guest_num = int(input(f"{i + 1} Enter number of guests: "))
      if guest_num > height * width or guest_num < 1: 
        print("Guest number must be between 1 and height * width inclusive.")
        return
      room_num = 0
      floor_num = 0
      while height < guest_num :
          room_num += 1
          guest_num -= height
      if guest_num > 0 :
        room_num += 1
      floor_num = guest_num
      room_code = "0" + str(room_num) if room_num < 10 else str(room_num) 
      room = str(floor_num) + str(room_code)
      result.append(room);
  for i in result:
    print(i)

find_acm_hotel_room()

4. 풀이하면서 막혔던 점과 고민

이 문제는 특별히 막힌 점은 없었는데 다만 좀 더 최적화 할 수 있지 않았나 하는 생각이 들었다. 예를 들어 아래 로직을 보면

while height < guest_num :
    room_num += 1
    guest_num -= height

guest_numheight 값을 한번씩 빼주는데 guest_num이 적은 편일때는 상관 없지만 엄청 큰 숫자였을때는 처리하는데 오래 걸릴 것 같다는 생각이 들었다.

5. 풀이 후 알게된 개념과 소감

  1. 번에서 언급된 이슈에 대해 고민해본 결과,
while height < guest_num :
	multiplier = guest_num / height
    room_num += 1 * multiplier
    guest_num -= height * multiplier

식으로 처리하면 height를 매번 차감하는 것보다 배수를 사용하는 방법이 큰 값에서 좀더 빨리 처리될 수 있지 않을까 싶다.

좋은 웹페이지 즐겨찾기