본문 바로가기
알고리즘/백준

2738번 문제 : 행렬 덧셈

by son_i 2023. 5. 2.
728x90

2738번: 행렬 덧셈 (acmicpc.net)

 

2738번: 행렬 덧셈

첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같

www.acmicpc.net

자바

정말 간단하게 풀었지만 더 좋은 방법이 있었다.

나는 첫 행렬 farr[][] 하나와 두 번째 행렬 sarr[][]를 각각 만들어 저장하고 result[][]까지 만들어서 두 행렬을 더한 배열까지 만든 뒤 result[][]를 출력했다. 이렇게 하면 2차원 배열은 총 3개 반복문은 4개를 사용한 셈.

 

보완해서

result[][]를 없앤 뒤 farr[][]와 sarr[][]를 더한 것을 바로 출력함. 2차원 배열 2개 반복문 3개 사용

 

더 보완

아예 겉반복문(행을 도는 반복문)을 *2를 하여서 2차원 배열 하나에 결과값을 저장해버리는 것 !

이렇게 되면 2차원 배열 1개 반복문 2개를 사용하게 됨.

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

class Main{
	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 arr[][] = new int[N][M];
    	
    	for(int i=0;i<2*N;i++) {
    		st = new StringTokenizer(br.readLine());
    		for(int j=0;j<M;j++) {
    			arr[i%N][j] += Integer.parseInt(st.nextToken());
    		}
    	}
    	
    	for(int i=0;i<N;i++) {
    		for(int j=0;j<M;j++) {
    			System.out.print(arr[i][j]);
    			if(j != M-1) {
    				System.out.print(" ");
    			}
    		}
    		System.out.println(" ");
    	}
	}
}

사고방식을 유연하게하자. 더 좋은 방법으로 풀 수 있도록 계속해서 노력하자.

아 그리고 마지막 조건문을 넣어주지 않으면 한 행의 마지막 요소가 출력되고 나서 공백이 또 출력되어 출력형식이 잘못되었다는 에러가 난다. !

'알고리즘 > 백준' 카테고리의 다른 글

10798번 문제 : 세로읽기  (2) 2023.05.02
2566번 문제 : 최댓값  (0) 2023.05.02
25206번 문제 : 너의 평점은  (0) 2023.05.02
1316번 문제 : 그룹 단어 체커  (0) 2023.04.30
2941번 문제 : 크로아티아 알파벳  (0) 2023.04.26