Baekjoon:10250

aiden·2024년 2월 21일
0

JAVA Programming

목록 보기
3/3

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));
        }
    }
}

한 번에 통과할 수는 없는걸까
꼭 한 번씩은 틀리게 된다.ㅎㅎ

profile
파인애플 좋아하세요?

0개의 댓글