[알고리즘] 백준 10250 ACM 호텔

Song·2021년 6월 17일
0

알고리즘

목록 보기
6/22

문제링크

문제 설명

  • 문제설명 :
  1. 높이(층수)가 h이고 넓이(방 개수)가 w인 호텔이 있다.
  2. 손님에게는 층수와 관계없이 호텔 정문에서 가까운 순서대로 방을 안내하고있다.

    예)
    101호 -> 201호 -> ... -> h01호
    102호 -> 202호 -> ... -> h02호

  3. 엘레베이터의 존재는 무시한다는 전제하에 n번 째 손님에게 안내할 방 번호를 구하라

주제

  • 기본 수학1

난이도

  • 중하

풀이

import math

n = int(input())

for _ in range(n):
    h, w, n = map(int, input().split())
    # 층수 구하기
    floor = n % h
    # 방호수 구하기
    room = math.ceil(n / h)

    if floor == 0:  # 만약 floor가 0이라면 최고층이라는 뜻이므로 입력된 층수를 할당해준다.
        floor = h
    # 출력 포맷 맞추기 예)12,1 일 시 1201로 출력
    print(floor * 100 + room)

풀이 방법

  • 층수 구하기
  1. 방 순서는 층수와 상관없이 1호부터 주어진다. 즉 101호, 201호, 301호...
  2. 그러므로 n번 손님 이전에 먼저 온 손님들이 있는 방은 패스하고 그 다음 빈 방을 구하기 위해서는 전체 층수와 손님 번호를 나눈 그 나머지로 결정이 된다.
  • 방 호수 구하기
  1. 층수 구하기와 마찬가지로 n번 손님 이전에 먼저 온 손님들이 있는 호수는 패스하고 다음 방을 구하기 위해서는 손님 번호 / 층수를 진행한다.
  2. 결과가 소수점으로 나올 시 반올림 진행한다.

문제를 풀고 알게된 개념 및 소감

  • 코드 길이와 난이도는 관계없구나..라는 생각이 들었다. 코드가 길다고 어려운게 아니고 반대로 코드가 짧다고 쉬운게 아니다. 특히 이 문제가 그렇다. 코드가 간결하지만 나에게 쉬운 문제는 아니였다.

    물론 기본적인 수학 능력이 있는 사람은 뚝딱할 수 있을지 모르겠지만.. 패턴을 하나 하나 그려가며 공식을 찾아내는 것 또한 중요한 능력인거 같다.

    이 문제는 우리 알고리즘 스터디 팀원분이 알려주신 문제인데 어려운 공식있는 다른 문제도 직접 손으로 써가며 패턴을 찾아내는 모습이 정말 대단하다고 생각했다.

    그렇게 끈기있이 하나를 붙잡는 모습이 개발자에게 필요한 소양 중 하나라고 생각하기에 나도 그런 모습을 닮을 수 있도록 노력해야겠다.
profile
Learn From Yesterday, Live Today, Hope for Tomorrow

0개의 댓글