반응형
문제 설명
이 문제는 손님들을 온 순서대로 엘리베이터에서 호수까지 가깝게 층수가 h까지고 동수가 w까지인 호텔에 배치하는 것이다.
그리고 거리가 같을 때는 아래층을 선호하기에 1호 라인의 101부터 h층까지 순서대로 채우고 다 채우면 2호라인 순으로 나아가면 된다.
따라서 w는 고려하지 않고 입력받은 h와 n만을 이용하여 문제를 풀 수 있다.
풀이과정
- 효율적인 입출력을 위해 BufferedReader와 InputStreamReader를 통해 문자열 데이터를 입력 받는다.
- 이 과정을 위해서는 IOException 예외를 처리해준다.
- 문자열의 효율적인 처리를 위해 StringBuilder 객체를 선언한다.
- t를 입력받고 for문 안에 StringTokenizer 객체를 생성하여 공백을 기준으로 h, w, n을 입력받는다.
이때, w는 필요하지 않으므로 st.nextToken();으로 순서를 넘긴다. - n % h == 0일 때, 예를 들어 6층 건물에 6번째 손님이 왔을 경우, n % h == 0인데 실제로는 6층에 배정을 하므로 따로 처리를 한다.
h * 100 + (n / h)와 \n을 StringBuilder 객체에 추가한다. - 그 외의 경우에는 (n % h) * 100 + (n / h) + 1와 \n을 StringBuilder 객체에 추가한다.
- 모든 반복이 끝나면 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);
}
}
파이썬으로 생각하면 굉장히 쉬운 문제인데 아직 자바의 문법이 어색해서 불편하다. 얼른 연습해서 다양한 문제들을 풀어보고 싶다.
반응형
'Algorithm > baekjoon' 카테고리의 다른 글
[백준 1251 파이썬(python)/자바(java)] 단어 나누기 (0) | 2023.06.19 |
---|---|
[백준 1181 파이썬/python] 단어 정렬 (0) | 2023.06.11 |
[백준 4153 자바/Java] 직각삼각형 (0) | 2023.05.25 |
[백준 1085 자바/Java] 직사각형에서 탈출 (0) | 2023.05.25 |
[백준 2920 자바/Java] 음계 (0) | 2023.05.23 |