본문 바로가기
Algorithm/Baekjoon

[백준] 10250번 : ACM 호텔 -Java

by unknownomad 2022. 3. 24.

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

 

10250번: ACM 호텔

프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수

www.acmicpc.net



알고리즘

방 배정 우선순위

엘리베이터로부터 가까운 거리부터 배정

거리가 같은 경우 낮은 층수부터 배정

(일반 아파트 호수 매김 방법과 동일함)

 

1. Y (층) 구하기

int Y;

if(N % H == 0) {
    Y = H * 100;
} else {
    Y = (N % H) * 100;
}

 

2. X (거리) 구하기

int X;

if(N % H == 0) {
    X = N / H;
} else {
    X = (N / H) + 1;
}

 

정리

  • H (층)
  • W (한 층의 방 개수) : N이 H * W 값보다 크게 주어지지 않기에 필요 X
  • N (N 번째로 오는 손님)

풀이

1. Scanner

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
		
        Scanner in = new Scanner(System.in);
 
        int T = in.nextInt(); //테스트 케이스
        int Y, int X;
        for(int i = 0; i < T; i++) {
			
            int H = in.nextInt();
            int W = in.nextInt(); //안 쓰는 변수, 값만 받기
            int N = in.nextInt();
			
            if(N % H == 0) {
                //short ver.
                System.out.println((H * 100) + (N / H));
                
                //long ver.
                Y = H * 100;
                X = N / H;
                System.out.println(Y + X);
            } else {
                //short ver.
                System.out.println(((N % H) * 100) + ((N / H) + 1));
                
                //long ver.
                Y = (N % H) * 100;
                X = (N / H) + 1;
                System.out.println(Y + X);
            }
        }
    }
}

 

2. BufferedReader

import java.util.StringTokenizer;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.BufferedReader;
 
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int T = Integer.parseInt(br.readLine()); //테스트 케이스
        for (int i = 0; i < T; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
            int H = Integer.parseInt(st.nextToken());
            st.nextToken(); //안 쓰는 변수, 값만 받기
            int N = Integer.parseInt(st.nextToken());
 
            if (N % H == 0) {
                sb.append((H * 100) + (N / H)).append('\n');
            } else {
                sb.append(((N % H) * 100) + ((N / H) + 1)).append('\n');
            }
        }
        System.out.print(sb);
    }
}

성능

  • BufferedReader > Scanner

 


출처 : https://st-lab.tistory.com/77

댓글