-
[백준/BOJ] 10250번 : ACM호텔 (JAVA / 자바)백준 2022. 2. 9. 17:23
안녕하세요~ 코딩하는 코알못 코메인입니다.
https://www.acmicpc.net/problem/10250
10250번: ACM 호텔
프로그램은 표준 입력에서 입력 데이터를 받는다. 프로그램의 입력은 T 개의 테스트 데이터로 이루어져 있는데 T 는 입력의 맨 첫 줄에 주어진다. 각 테스트 데이터는 한 행으로서 H, W, N, 세 정수
www.acmicpc.net
- 문제 -
난이도 브론즈 3 문제이다.
자바에서 입력방식은 scanner와 bufferedreader가 있다.
자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.
bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.
더 자세한 내용은 아래 글 참고 하면 좋다.
(JAVA / 자바) Scanner 와 Bufferedreader
안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자
comain.tistory.com
풀이 방법
그림을 보고 패턴을 찾아본다. 예제 1번 처럼 6층에 한 층당 12호까지 있는 호텔인 경우 10번쨰 손님 방은 10 을 6으로 나누어서 나온 나머지가 층 수가 될 것이고, 몫이 호 수가 될 것이다. 하지만 손님이 번호가 층수의 배수 즉 12번째 손님이나 18번째 손님은 꼭대기 층에 숙박할 텐데 하지만 나누면 나머지가 0이 되니 꼭대기가 6인 수와 맞지 않다. 그렇기때문에 조건문을 통해 나머지가 0인 경우를 추가해준다.
6층 12호 호텔 10번째 손님은 (10 % 6) + (10 / 6) 해주면 4와 1이 나올텐데 두번째 호수는 두자리로 표현해야하니 401호가 나온다. 하지만 직접 사진에 수를 세어보면 402호이다. 나눠서 몫이 0일 경우에 1호이기 때문에 나온 몫의 +1을 해줘야한다.
그러면 10번째 손님은 402호가 된다.
12번째 손님을 보자. (12 % 6) + (12 / 6) 해주면 0과 2가 나온다. 위에서 말했든 0일 경우엔 호텔의 층수를 대입해준다.
6과 2가 된다. 여기서 주의할 점은 10번째 손님때처럼 호에 +1을 해주면 603이 되는데 이렇게 나머지가 0일 경우엔 몫 그대로 넣어줘야한다. 이유는 10번째와 같은 이유이다.
그러니 나머지가 0일 때는 002가 602가 되는 것이고, 0이 아닐때는 401이 402가 되는 것이다. 이 것들을 주의하면서 코드를 짜보자.
테스트 케이스만큼 반복하는 반복문을 만든다.
세 값을 입력받고 문자열 변수를 하나 만든다. 이 변수는 위의 조건대로 따로다로 나온 층과 호를 붙여서 하나로 표현하기 위한 변수이다.
조건대로 방 번호를 구한다.
-풀이-
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)); 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()); int W = Integer.parseInt(st.nextToken()); int N = Integer.parseInt(st.nextToken()); //방번호를 저장하기위한 문자열 변수 선언. String room; if(N % H == 0) { room = String.valueOf(H); //방 번호가 예를 들어 403인데 그냥 두 수를 합치면 43이 되어버린다. //그렇기때문에 String.format을 사용해 방번호중 뒤 2자리를 앞에 0이 올 수 있게 만들어준다. room += String.format("%02d", (N / H)); }else { room = String.valueOf(N % H); room += String.format("%02d", (N / H) + 1); } System.out.println(room); } } }
-결과-
아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.
'백준' 카테고리의 다른 글
[백준/BOJ] 10409번 : 서버 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10262번 : 주사위 게임 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10214번 : Baseball (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10178번 : 할로윈의 사탕 (JAVA / 자바) (0) 2022.02.09 [백준/BOJ] 10103번 : 주사위 게임 (JAVA / 자바) (0) 2022.02.09