문제는 장황하지만 너무 쉬운 문제라서 아마 다들 별 문제 없이 풀었을 것 같다.
오히려 나는 아직 백준이 익숙하지 않아 문제보다는 입,출력 방식이 이해가 안되어서 잠깐 헤맸다.
입력의 1번 행은 " 몇 개의 테스트 데이터를 입력할 것인지 "
입력 2, 3번 행은 각각의 테스트 데이터를 띄어쓰기만 해서 테스트 데이터를 입력한다는 의미이다.
다시 문제로 돌아가보자.
손님들은 같은 위치의 방이라면 낮은 층을 선호하고, 방 위치가 다르다면 층이 다 높더라도 방 넘버가 작은 것을 선호한다고 한다.
( => 102호보다는 101호를 선호하며 102호보다는 201호를 선호한다. )
수식을 이용해서 푸는 방법도 있겠지만 배열을 배운 사람이라면 문제를 보자마자 머리 속에서 2중 for문이 떠오를 것이다.
근데 사실 테스트 데이터를 여러번 입력하도록 되어 있기 때문에 3중 for문이 된다.
아래의 코드를 이해하기 위해서는 다음의 사전 지식이 필요하다. 알아놓으면 도움이 되니까 모른다면 겸사겸사 검색해보는 것도 좋을 것 같다.
1. 반복문에 이름 붙이기(Labeled-Loop)
2. BufferedReader, StringBuilder
제한시간이 1초라서 혹시 모른다는 생각에 사용한 것들이고, 사실 입력에 10000층짜리 건물이 들어가있지 않다면 1번은 필요 없고 2번은 Scanner로 대체 가능하다.
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 testCase = Integer.parseInt(br.readLine());
T : for (int k=0; k<testCase; k++) { // 테스트 반복 횟수
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int floor = Integer.parseInt(st.nextToken());
int room = Integer.parseInt(st.nextToken());
int client = Integer.parseInt(st.nextToken());
int count = 1; // 호텔의 방 번호가 101번부터 시작하므로 count는 1
for (int i = 1; i <= room; i++) { // 층이 달라도 방 번호가 작은 것을 선호하므로
for (int j = 1; j <= floor; j++) { // 방 번호별 - 층별 순으로 반복문 돌림
if (count == client) {
sb.append((j * 100) + i).append('\n');
continue T; // 맞는 조건을 찾았다면 다음 테스트 케이스로
}
count++;
}
}
}
System.out.println(sb);
}
}
'CS ﹒ Algorithm > Baekjoon' 카테고리의 다른 글
JAVA백준 문제풀이 (7) 2839:설탕 배달 (0) | 2022.07.02 |
---|---|
JAVA백준 문제풀이 (6) 2775: 부녀회장이 될테야 (0) | 2022.07.01 |
JAVA백준 문제풀이 (4) 2869:달팽이는 올라가고 싶다 (0) | 2022.06.29 |
JAVA백준 문제풀이 (3) 1193:분수찾기 (0) | 2022.06.28 |
JAVA백준 문제풀이 (2) 2922:벌집 (0) | 2022.06.27 |