관리자 글쓰기
[백준] 11945번 : 뜨거운 붕어빵 - JAVA
2024. 11. 13. 17:19 - DoosanBaek
728x90

[링크] :  https://www.acmicpc.net/problem/11945


 

💎 문제 분석 & 제약 조건

 

 

문제 분석 :

 

N x M 으로 된 붕어빵 좌우 뒤집기 , 입력된 붕어빵 모양을 행마다 좌우 반전 시킨 형태로 출력하기

 

 

 

제약 조건 : 

 

N과 M은 0 이상 10 이하

 

N과 M이 0인 경우는 특별히 처리할 필요 없이 빈 입력과 동일하게 다룰수있다.

 

각행에 주어진 0과 1의 개수는 정확히 M개

 

입력값에 포함된 각 줄은 모두 좌우 반전되어야 한다.

 


🚀 의사 결정

 

첫번째 줄에 N과 M을 받고, 다음 N개의 줄에 M개의 0 또는 1을 입력받는다.

 

각 줄을 문자열로 받아 좌우 반전시킨다.

 

반전된 내용을 출력한다.

 


📜 소스코드(Java)

 

Scanner 사용 시, 백준 사이트에서 런타임 오류 발생

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 행렬의 크기 N과 M을 입력
        int N = sc.nextInt();
        int M = sc.nextInt();
        sc.nextLine();  // 버퍼에 남은 줄바꿈 문자를 제거
        char[][] matrix = new char[N][M];

        // 행렬의 값을 입력
        for (int i = 0; i < N; i++) {
            matrix[i] = sc.nextLine().toCharArray();
        }
        
        sc.close();

        // 대칭 변환된 행렬을 출력
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < M; j++) {
                System.out.print(matrix[i][M - j - 1]);
            }
            System.out.println();
        }
    }
}

 

BufferedReader 사용시 오류 없이 동작함

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));
        
        // br로 첫 줄 받아서 st에 저장(N과 M을 공백없이 저장)
        StringTokenizer st = new StringTokenizer(br.readLine()); 
        
        // N, M 입력받기
        int N = Integer.parseInt(st.nextToken()); // 받은 첫줄을 N과 M으로 각각 나눔
        int M = Integer.parseInt(st.nextToken());

        // 각 행을 입력받고, 뒤집어서, 출력한다.
        for (int i = 0; i < N; i++) {

			// br로 한 줄씩 받아서, char 배열에 한 글자씩 넣는다.
            char[] arr = br.readLine().toCharArray();
            
			// 배열에 저장된 값을 역순으로 출력한다.
            for(int j = M-1; j >= 0; j--) {  
                System.out.print(arr[j]);
            }
            
            // 한 줄 출력이 끝나면 줄바꿈
            System.out.println(); 
        }
    }
}

 

Scanner 를 사용할 경우에, 로컬환경에서는 동작하는듯 보이지만

 

백준사이트에서 제출 시 런타임 에러가 발생한다.

N  이나 M 이 0인 경우 때문.

Scanner로 문자열을 읽어오는 next() 함수에서 NoSuchElementException 오류를 리턴

 

더 좋은 방법은 Scanner 대신 BufferedReader를 사용하는 것.

 

BufferedReader로 문자열 읽어올때 readLine() 함수 설명에는 아무런 데이터 없을경우 

오류가 아닌 null을 리턴한다.

백준에서 런타임 에러가 발생하지 않는다.

728x90