java

백준 2738번 문제 행렬 덧셈 (Java_자바)

먼지제거제 2024. 3. 3. 00:32

 

문제 ) https://www.acmicpc.net/problem/2738

 

 

 

2738번 행렬 덧셈 문제/입력/출력

 

 

2738번 예제 입력/출력

 

 

오늘은 행렬 문제를 풀어보자!

 

두 가지 방법 Scanner 그리고 (BufferedReader + StringTokenizer)를 사용해서 이중 for문으로 입력과 출력을 해보자!

 

포인트!!

행렬 A(2차원 배열 3x3), 행렬 B(2차원 배열 3x3)를 만들고

A의 행 수 3개(1 1 1)와 숫자와
B의 행 수 3개(3 3 3)의 숫자를

더해주자!

 


Scanner 사용

 

import java.util.Scanner;

public class Procession_2738 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = sc.nextInt();

        int arr1[][] = new int[n][m];
        int arr2[][] = new int[n][m];

        /*
         * 1  1  1
         * 2  2  2
         * 0  1  0
         * */
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr1[i][j] = sc.nextInt();
            }
        }

        /*
        * 3  3  3
        * 4  4  4
        * 5  5  100
        * */
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                arr2[i][j] = sc.nextInt();
            }
        }

        /*
        * 4  4  4
        * 6  6  6
        * 5  6  100
        *
        * */
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(arr1[i][j]+arr2[i][j]+" ");
                if(j == m-1){   // 열 2번 끝 , 개행 추가
                    System.out.println();
                }
            }
        }
        
    }
}

 

 

 

이중 포문 3번은... 뭔가.. 2번으로 줄일수 있을 거 같은데 조금 더 노력해 보자!!

Scanner 사용

 

 


 

BufferedReader + StringTokenizer 사용

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Procession_2738 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        int arr1[][] = new int[n][m];
        int arr2[][] = new int[n][m];


        /*
         * 1  1  1
         * 2  2  2
         * 0  1  0
         * */
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < m; j++) {
                arr1[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        /*
        * 3  3  3
        * 4  4  4
        * 5  5  100
        * */
        for (int i = 0; i < n; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < m; j++) {
                arr2[i][j] = Integer.parseInt(st.nextToken());
            }
        }

        /*
        * 4  4  4
        * 6  6  6
        * 5  6  100
        *
        * */
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                System.out.print(arr1[i][j]+arr2[i][j]+" ");
                if(j == m-1){   // 열 2번 끝 , 개행 추가
                    System.out.println();
                }
            }
        }

    }
}

 

와... 이 정도라니 Scanner -> BufferedReader, StringTokenizer로 바꾸니깐

메모리와 시간이 반으로 줄었다...

 

BufferedReader, StringTokenizer 사용

 

 

 

다짐 ) 좀 더 많은 고수님들의 블로그를 참고해서 이중 for문을 줄일 수 있는 코드를 만들어보자!