관리 메뉴

cococo-coding

10250번. ACM 호텔 본문

[BOJ] 코드 모음/C_baekJoon

10250번. ACM 호텔

_dani 2023. 11. 23. 19:31

최종코드

#include <stdio.h>

int main() {
    //1.테스트케이스를 입력받는다.
    //2.호텔 층, 층의 방, 몇 번째 손님인지를 입력받는다.
    //3. 손님에게 배정되어야 하는 방 번호를 출력한다. 

    //1
    int num;
    scanf("%d", &num);
    
    //2
    for(int i=0; i<num; i++){
    int h=0,w=0,n=0;  
    scanf("%d %d %d", &h, &w, &n);
        
        
    //n/h=몫, 여기에 +1을 해서 뒤에 붙여주고
    //n%h=나머지, 이거를 받아서 앞에 붙여준다

    //반례) 이때 h=1인 경우도 고려해줘야함 
    //반례2) 나누어 떨어지는 경우도 고려해줘야함
    int back=0, front=0;
    if(h==1){
        back=n;
        front=h;
    } else if(n%h==0){
        back=(n/h);
        front=h;
    } else{
        back=(n/h)+1;
        front=n%h;
    }
    
    //3 
    //룸 숫자를 조합하자
    if(back<10){
        printf("%d0%d\n",front,back);
    } else {
       printf("%d%d\n",front,back);
    }
    }
  
    return 0;
}

과정

우선은 아래와 같이 한 케이스만 입력받아 방 번호를 출력하는 코드를 먼저 짜봤다. 

#include <stdio.h>

int main() {
    //1.테스트케이스를 입력받는다.
    //2.호텔 층, 층의 방, 몇 번째 손님인지를 입력받는다.
    //3. 손님에게 배정되어야 하는 방 번호를 출력한다. 

    /*1
    int num;
    scanf("%d", &num);
    */
    
    //2
    //우선은 한 케이스를 입력받아 계산하는 알고리즘을 짜보자
    int h=0,w=0,n=0; 
    int cnt=0;
    
    scanf("%d %d %d", &h, &w, &n);
    //n/h=몫, 여기에 +1을 해서 뒤에 붙여주고
    //n%h=나머지, 이거를 받아서 앞에 붙여준다
    printf("%d %d\n", n/h, n%h);
    int back=n/h+1;
    int front=n%h;
    
    //3 
    //룸 숫자를 조합하자
   if(back<10){
        printf("%d0%d",front,back);
    } else {
       printf("%d%d\n",front,back);
    }
  
    return 0;
}

입출력도 잘 나와서 바로 여러케이스를 입력받을 수 있도록 코드를 수정했는데 자꾸만 에러가 났다. 

질문게시판에서 여러 반례를 확인할 수 있었고, 내가 고려하지 못한 2가지 케이스가 예외로 있었다.

1. H=1가 1인 경우 (높이가 1층만 있는 경우)

2. N/H가 나누어 떨어지는 경우 

이 경우를 따로 if-else문으로 분기하여 조건을 추가해주었더니 통과가 되었다. 

 

느낀점

문제를 보고 여러가지 예외케이스를 생각해두자. 그에 따라 분기하여 코드를 짜야 수정할 일이 안 생긴다. 

 

2023.11.23

'[BOJ] 코드 모음 > C_baekJoon' 카테고리의 다른 글

2292번. 벌집  (1) 2023.11.27
1978번. 소수 찾기  (1) 2023.11.26
1157번. 단어 공부  (2) 2023.11.23
2920번. 음계  (1) 2023.11.22
8958번. OX퀴즈  (2) 2023.11.22