반응형
문제
풀이
6층 12호 10번째 손님일 경우엔
101(1) -> 201(2) -> 301(3) -> 401(4) -> 501(5) -> 601(6) -> 102(7) -> 202(8) -> 302(9) -> 402(10)
순서대로 배정이 됨으로
2중 for문으로 순서를 계산하여 해결을 하였다
코드
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int[] H = new int[T];
int[] W = new int[T];
int[] N = new int[T];
for (int i = 0; i < T; i++) {
H[i] = sc.nextInt();
W[i] = sc.nextInt();
N[i] = sc.nextInt();
}
for (int i = 0; i < T; i++) {
//N 번째 방번호 찾기
//호를 고정으로 하고 층만 올라감
int count = 1;
forout:
for (int k = 1; k <= W[i]; k++) {
for (int j = 1; j <= H[i]; j++) {
if (N[i] == count) {
System.out.printf("%d%02d\n", j, k);
break forout;
}
count++;
}
}
}
}
}
정상작동은 하지만 2중 for문을 탈출시키기 위한 loop label 코드가 별로 마음에 들지 않는다
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
int H;
int W;
int N;
for (int i = 0; i < T; i++) {
H = sc.nextInt();
W = sc.nextInt();
N = sc.nextInt();
System.out.println(searchRoom(H, W, N));
}
}
public static int searchRoom(int H, int W, int N) {
int count = 1;
for (int k = 1; k <= W; k++) {
for (int j = 1; j <= H; j++) {
if (N == count) {
return Integer.parseInt(String.format("%d%02d", j, k));
}
count++;
}
}
return 0;
}
}
2중 for문의 코드를 함수로 만들어서 loop label 대신 return으로 탈출 처리하였고
값을 입력받자 마자 처리하는 것으로 코드를 수정하였다
처음에는 2차원 배열을 만들어서 방 번호를 전부 계산하고 그다음 순서대로 찾는 것을 구현하려고 했는데
순서대로 찾는 걸 구현하다 보니 굳이 2차원배열 계산이 필요 없다는 걸 알아서 시간을 소비해버렸다
출처
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 2798번 블랙잭 자바 java (0) | 2021.04.08 |
---|---|
백준 2292번 벌집 자바 java (0) | 2021.04.08 |
백준 2775번 부녀회장이 될테야 자바 java (0) | 2021.04.07 |
백준 1316번 그룹 단어 체커 자바 java (0) | 2021.04.06 |
백준 1193번 분수찾기 자바 java (0) | 2021.04.06 |
댓글