https://www.acmicpc.net/problem/10250
이 문제의 경우 수학 계산식에서 오류가 있었다.
우선 첫 번째 제출
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int repeat = scanner.nextInt();
int H, W, N;
List<Integer> floor = new ArrayList<>();
List<Integer> roomNumber = new ArrayList<>();
for(int i = 0; i < repeat; i++) {
H = scanner.nextInt();
W = scanner.nextInt();
N = scanner.nextInt();
roomNumber.add(N / H + 1);
if(N % H == 0) {
floor.add(H);
} else{
floor.add(N % H);
}
}
for(int i = 0; i < repeat; i++) {
System.out.printf("%d%02d\n", floor.get(i), roomNumber.get(i));
}
}
}
예제 입출력은 잘 나와서 뭐가 잘못된거지? 했었던 문제.
하지만 질문 게시판을 눌러보니 바로 잘못된 출력을 찾았다.
1
10 10 10
1002
이 입력은 1001이 나와야 한다. 1이 더 크게 나오자 바로 문제를 눈치챘다. 층에 대한 조건문은 작성했으면서 호수에 대한 조건문은 작성하지 않았다.
어떤 경우에도 상관없이 roomNumber.add(N / H + 1);
가 호수가 되도록 한 것이 문제였다. 이 부분도 나머지가 0이고 딱 꼭대기 층인 경우, +1을 해주면 안된다.
따라서 이렇게 수정하였다.
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
int repeat = scanner.nextInt();
int H, W, N;
List<Integer> floor = new ArrayList<>();
List<Integer> roomNumber = new ArrayList<>();
for(int i = 0; i < repeat; i++) {
H = scanner.nextInt();
W = scanner.nextInt();
N = scanner.nextInt();
//조건문으로 수정한 부분
if(N % H == 0) {
roomNumber.add(N / H);
} else{
roomNumber.add(N / H + 1);
}
if(N % H == 0) {
floor.add(H);
} else{
floor.add(N % H);
}
}
for(int i = 0; i < repeat; i++) {
System.out.printf("%d%02d\n", floor.get(i), roomNumber.get(i));
}
}
}
한 번에 통과할 수는 없는걸까
꼭 한 번씩은 틀리게 된다.ㅎㅎ