나를 기록하다
article thumbnail
반응형

백준(baekjoon) 10250번 ACM 호텔


문제 설명

이 문제는 손님들을 온 순서대로 엘리베이터에서 호수까지 가깝게 층수가 h까지고 동수가 w까지인 호텔에 배치하는 것이다.

그리고 거리가 같을 때는 아래층을 선호하기에 1호 라인의 101부터 h층까지 순서대로 채우고 다 채우면 2호라인 순으로 나아가면 된다.

따라서 w는 고려하지 않고 입력받은 h와 n만을 이용하여 문제를 풀 수 있다.


풀이과정

  1. 효율적인 입출력을 위해 BufferedReader와 InputStreamReader를 통해 문자열 데이터를 입력 받는다.
  2. 이 과정을 위해서는 IOException 예외를 처리해준다.
  3. 문자열의 효율적인 처리를 위해 StringBuilder 객체를 선언한다.
  4. t를 입력받고 for문 안에 StringTokenizer 객체를 생성하여 공백을 기준으로 h, w, n을 입력받는다.
    이때, w는 필요하지 않으므로 st.nextToken();으로 순서를 넘긴다.
  5. n % h == 0일 때, 예를 들어 6층 건물에 6번째 손님이 왔을 경우, n % h == 0인데 실제로는 6층에 배정을 하므로 따로 처리를 한다.
    h * 100 + (n / h)와 \n을 StringBuilder 객체에 추가한다.
  6. 그 외의 경우에는 (n % h) * 100 + (n / h) + 1와 \n을 StringBuilder 객체에 추가한다.
  7. 모든 반복이 끝나면 StringBuilder 객체에 저장된 값들을 출력한다.

전체코드

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

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);

    }
}

파이썬으로 생각하면 굉장히 쉬운 문제인데 아직 자바의 문법이 어색해서 불편하다. 얼른 연습해서 다양한 문제들을 풀어보고 싶다.

반응형
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...