백준 10250번 문제(ACM 호텔) C++로 풀기

doctorsohn·2021년 1월 26일
0

백준

목록 보기
5/16

10250번 문제 ACM 호텔 링크


문제 요약

특정 규칙에 따라 N 번째로 도착한 손님에게 배정될 방 번호를 계산한다.


코드

#include <iostream>

using namespace std;

int main()
{
  int cases;  // 케이스
  cin>>cases;
  for(int i=0;i<cases;i++)
  {
    int num[3]; // 호텔의 층 수, 각 층의 방 수, 몇 번째 손님
    for(int j=0;j<3;j++)
    {
      cin >> num[j];
    }
    int a=num[2]%num[0];  // 배치할 층
    int b=num[2]/num[0]+1;  // 배치할 방, 방이 1부터 시작하므로 1을 더해줌
    if(a==0)  // 손님의 방이 호텔 층 수의 배수라면
    {
      a=num[0];
      b-=1;
    }
    if(b>=10) // 방이 10개가 넘어간다면
    {
      cout<<a<<b<<"\n";
    }
    else  // 중간에 0을 넣어야 함 
    {
      cout<<a<<"0"<<b<<"\n";
    }
  }
}

풀이


문제의 규칙에 따라, 손님이 올 때마다 엘리베이터로부터 가까운 방부터 배정해 층수를 늘려나가야 한다. 예를 들어, 위의 그림과 같은 호텔이 있을 때, 손님이 10명이 온다고 가정하면

1번째 손님2번째 손님3번째 손님4번째 손님5번째 손님6번째 손님7번째 손님8번째 손님9번째 손님10번째 손님
101호201호301호401호501호601호102호202호302호402호

이렇게 배치하게 된다.

손님의 번호를 보고 몇 번째 층의 몇 번째 방인지를 알아내고, 거기에 따라 몇 호에 묵을지를 출력한다.


주의점

몇 번째 방인지를 구할 때, 방의 수가 10 이하인지 확인해야 한다. "몇 층의 몇 번째 방" 방식에서 "몇 번째 방"의 수가 10 이하라면, 앞에 0을 붙여야 정상적으로 출력할 수 있다.

profile
하고싶은일하는게이머

0개의 댓글