[백준/Java] 10811번 오류 해결

2024. 3. 5. 16:11코딩 테스트(Coding Test)/백준

문제

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        //N(바구니 수), M(역순으로 바꿀 횟수) 입력받기
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];

        //배열 초기화
        for(int i = 0; i < N; i++) {
            arr[i] = (i + 1);
        }

        //M번 반복
        for(int x = 0; x < M; x++) {
            //한 번 역순으로 바꿀 때,
            //1. 순서를 역순으로 만들 범위를 정함
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());

            //2. 그 범위에 들어있는 바구니의 순서를 역순으로 만듦
            reverse(arr, i , j);
        }
        
        System.out.print(Arrays.toString(arr));

    }
    static void reverse(int[] arr, int x, int y) {
        while (x < y) {
            int temp = arr[x - 1];
            arr[x - 1] = arr[y - 1];
            arr[y - 1] = temp;
            x++;
            y--;
        }
    }
}

 

 

이 코드로 제출을 헀더니 틀렸다고 나왔다.

 

분명히 답은 같게 나오는데ㅜㅜ

 

그 이유는 문제에서 원하는 출력 형식은 "가장 왼쪽에 있는 바구니부터 바구니에 적혀있는 순서를 공백으로 구분해 출력"이라고 명시되어 있는데, Arrays.toString(arr) 메소드는 배열의 요소를 "[...]" 형태로 출력한다.

이는 배열의 내용을 직렬화한 문자열을 반환하는 것이지, 요구된 출력 형식과는 다르다.

그렇기 때문에 틀렸다고 결과가 나온 것이었다.

 

수정한 코드

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        //N(바구니 수), M(역순으로 바꿀 횟수) 입력받기
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());

        int[] arr = new int[N];

        //배열 초기화
        for(int i = 0; i < N; i++) {
            arr[i] = (i + 1);
        }

        //M번 반복
        for(int x = 0; x < M; x++) {
            //한 번 역순으로 바꿀 때,
            //1. 순서를 역순으로 만들 범위를 정함
            st = new StringTokenizer(br.readLine());
            int i = Integer.parseInt(st.nextToken());
            int j = Integer.parseInt(st.nextToken());

            //2. 그 범위에 들어있는 바구니의 순서를 역순으로 만듦
            reverse(arr, i , j);
        }
        
        for (int num : arr) {
            System.out.print(num + " ");
        }

    }
    static void reverse(int[] arr, int x, int y) {
        while (x < y) {
            int temp = arr[x - 1];
            arr[x - 1] = arr[y - 1];
            arr[y - 1] = temp;
            x++;
            y--;
        }
    }
}

'코딩 테스트(Coding Test) > 백준' 카테고리의 다른 글

[Python] A×B  (0) 2024.07.17
[Python] A-B  (0) 2024.07.17
[Python] A+B  (0) 2024.07.17
[Python] Hello World  (0) 2024.07.17
[백준] JAVA 10988번 오류 해결  (0) 2024.03.14