책 읽다가 코딩하다 죽을래

[JAVA] 백준 10250번 : ACM 호텔 문제 풀이 본문

코딩/알고리즘문제

[JAVA] 백준 10250번 : ACM 호텔 문제 풀이

ABlue 2021. 1. 6. 23:43

www.acmicpc.net/problem/10250

 

10250번: ACM 호텔

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

www.acmicpc.net

코드는 다음과 같다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		ArrayList<Integer> input  = new ArrayList<Integer>();
		
		BufferedReader br = new BufferedReader((new InputStreamReader(System.in)));
		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());
			Integer.parseInt(st.nextToken());
			int N = Integer.parseInt(st.nextToken());
			
			input.add(H);
			input.add(N);
		}
		
		for(int i = 0; i < input.size();) {
			int H = input.get(i++);
			int N = input.get(i++);
			int Y = 0, X = 1;
			for(int j = 0; j < N; j++) {
				Y++;
				if(H < Y) {
					Y = 1;
					X++;
				}
			}
			System.out.println(Y * 100 + X);
		}

	}
}

먼저 BufferReader를 통해 H,W,N 값을 받아오는데 여기서 중요한 것은 W값은 굳이 받아올 필요가 없다.

왜냐하면 쓸데없는 데이터이기 때문이다. 어차피 H개의 층수와 각 층 마다 w개의 방이 정해져있으면 H x W 의 값보다 더 높은 N의 값은 고려하지 않기 때문이다. 즉 5개의 층수와 각 층마다 5개의 방이 있다치면 N은 25보다 더 높은 값이 입력으로 들어가는 경우는 고려하지 않는다는 뜻이므로 굳이 각 층마다 w개인지는 알 필요가 없다. 

 

그래서 제 코드를 보시면 W값 자체는 저장하는 코드는 없다. 

즉 H와 N의 수만 저장을 하고 YYXX호에서 YY를 정하는 변수 Y와 XX를 정하는 변수 X만 정해주면 이 문제는 쉽게 해결할 수 있을 것이다.