happy coding

[java] 20205. 교수님 그림이 깨지는데요? 본문

coding study/baekjoon

[java] 20205. 교수님 그림이 깨지는데요?

yeoonii 2023. 8. 9. 15:15
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 st1 = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st1.nextToken());   //가로세로 길이
        int K = Integer.parseInt(st1.nextToken());   //이미지를 늘릴 배수

        //해당 배열 일단 생성
        int[][] array = new int[N*K][N*K];
        for (int i=0 ; i<N*K ; i++) {
            StringTokenizer st2 = new StringTokenizer(br.readLine());
            for (int j=0 ; j<N*K ; j++) {
                array[i][j] = Integer.parseInt(st2.nextToken());
            }
        }

        //수정



        //출력
        for (int i=0 ; i<N*K ; i++) {
            for (int j=0 ; j<N*K ; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }

    }
}

왜 틀렸을까 보니까, 두 개의 StringTokenizer를 사용하려면 두 번 입력을 받아야 합니다. 현재 코드에서는 StringTokenizer st1로 한 번 입력을 받은 후에, StringTokenizer st2로 두 번째 입력을 받아야 합니다. 그러므로 StringTokenizer st2를 사용할 때 또 다른 입력을 받아야 하며, 입력이 없어서 NoSuchElementException가 발생하게 되는 것입니다. 두 개의 입력값을 한 번에 받아오기 위해 StringTokenizer를 따로 사용하지 않고, split() 메서드나 StringTokenizer를 사용하지 않고도 처리할 수 있습니다.

 

라는 답변을 얻었다. 사실, 그전까지 잘 되던게 N을 N*K로 바뀐 후부터 안되는 거라서 저 부분을 굳이 바꿔야 하나 라는 의문은 들었으나 일단 받을 게 없다는 의미니까. 수정했다.

 

import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] sizes = br.readLine().split(" ");
        int N = Integer.parseInt(sizes[0]);   // 가로세로 길이
        int K = Integer.parseInt(sizes[1]);   // 이미지를 늘릴 배수

        // 픽셀 정보를 담을 2차원 배열 생성
        int[][] originalBitmap = new int[N][N];

        // 픽셀 정보 입력 받기
        for (int i = 0; i < N; i++) {
            String[] pixels = br.readLine().split(" ");
            for (int j = 0; j < N; j++) {
                originalBitmap[i][j] = Integer.parseInt(pixels[j]);
            }
        }

        // 늘린 이미지의 픽셀 정보 출력
        for (int i = 0; i < N * K; i++) {
            for (int j = 0; j < N * K; j++) {
                System.out.print(originalBitmap[i / K][j / K] + " ");
            }
            System.out.println();
        }
    }
}

나눗셈으로 합의봄.. 

 

 


https://mimah.tistory.com/entry/Java-StringTokenizer-NoSuchElementException-%EC%98%88%EC%A0%9C

 

[Java] StringTokenizer, NoSuchElementException 예제

StringTokenizer 문자열이 특정 구분자(delimiter)로 연결되어 있는 경우, 구분자를 기준으로 부분 문자열을 분리하기 위해 이용하는 클래스이다. String.split() 메서드를 사용하여 문자열을 구분할 수도

mimah.tistory.com

 

'coding study > baekjoon' 카테고리의 다른 글

[java] 10989. 수 정렬하기 3  (0) 2023.08.09
[java] 11653. 소인수분해  (0) 2023.08.09
[java] 1009. 분산 처리  (0) 2023.08.08
[java] 1076. 저항  (0) 2023.08.08
[java] 1152. 단어의 개수  (0) 2023.08.08
Comments