본문 바로가기

코딩테스트

[JAVA] 2차원 배열

2738 행렬 덧셈

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;

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(), " ");
    int a = Integer.parseInt(st.nextToken());
    int b = Integer.parseInt(st.nextToken());

    int[][] array = new int[a][b];
    int[][] array2 = new int[a][b];
    int[][] array3 = new int[a][b];

    for (int i=0; i<a;i++){
      st = new StringTokenizer(br.readLine(), " ");
      for (int j=0;j<b;j++){
        array[i][j] = Integer.parseInt(st.nextToken());
      } 
    }

    for (int i=0; i<a;i++){
      st = new StringTokenizer(br.readLine(), " ");
      for (int j=0;j<b;j++){
        array2[i][j] = Integer.parseInt(st.nextToken());
      } 
    }

    for (int i=0; i<a;i++){
      for (int j=0;j<b;j++){
        array3[i][j] = array[i][j] + array2[i][j];
      } 
    }

    for (int i=0; i<a;i++){
      for (int j=0;j<b;j++){
        System.out.print(array3[i][j] + " ");
      } 
      System.out.println();
    }

    br.close();
  }
}

정석대로 풀었다.

자바 배열은 위와같이 선언하고 초기화한다. default는 0.

부분만 초기화하고 싶다면 Arrays.fill() 메서드를 이용할 수도 있다. 쓸 일이 있나?


2566 최댓값

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;


public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    //int[][] array = new int[9][9];
    int x=0;
    int y=0;
    int max=0;

    for (int i=0; i<9;i++){
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      for (int j=0;j<9;j++){
        int n = Integer.parseInt(st.nextToken());
        if (n>max){
          max=n;
          x=i;
          y=j;
        } 
      } 
    }

    System.out.println(max);
    System.out.println((x+1) + " " + (y+1));
    
  }
}

굳이 2차원 배열을 선언하지 않아도 값을 받자마자 바로 비교하면 더 빠르다.

 


10798 세로읽기

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;

import java.util.*;


public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    String[] arr = new String[15]; 
    Arrays.fill(arr, "");

    for(int i=0;i<5;i++){
      String st = br.readLine();
      for (int j=0;j<st.length();j++){
        arr[j]=arr[j]+Character.toString(st.charAt(j));
      }
    }

    for (int i=0;i<15;i++){
      if (arr[i]==null)
        break;
      else
        System.out.print(arr[i]);
    }
    
  }
}

코드 자체는 어렵지 않은데 문자열 배열을 선언하면 default로 null로 처리돼서 null값이 합쳐지는 점이 어려웠다.

Arrays.fill(arr, ""); 이 메서드를 이용해서 공백 문자열로 전부 바꿔둠.

또 빈 문자열은 isempty() 말고 null이랑 비교해서 처리해야 한다.

Arrays 사용하려면 import java.util.* 해주

 


2563 색종이

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.io.IOException;
//import java.io.BufferedWriter;
//import java.io.OutputStreamWriter;


public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int[][] arr = new int[100][100];
    int n = Integer.parseInt(br.readLine());

    for (int i=0;i<n;i++){
      StringTokenizer st = new StringTokenizer(br.readLine(), " ");
      int a = Integer.parseInt(st.nextToken())-1;
      int b = Integer.parseInt(st.nextToken())-1;

      for (int j=a;j<a+10;j++){
        for (int k=b;k<b+10;k++){
          arr[j][k]=1;
        }
      }
    }

    int cnt=0;

    for (int i=0;i<100;i++){
      for (int j=0;j<100;j++){
        if (arr[i][j]==1)
          cnt++;
      }
    }

    System.out.println(cnt);
    
  }
}

풀이는 옛날꺼 배꼈다...ㅎ

수학적으로 접근하는게 아니라 그냥 넓이 체크용 100X100 2차원 배열 선언 후 색종이로 채워진 부분을 1로 바꿔주기!

코드는 딱히 어렵지 않다.

 


# 회고

 

생각해보니까 백준 카테고리를 따로 만들어서 백준이라고 말머리 붙일 이유가 없다.

사용한 언어 작성해야지. 이전것도 언젠가는...수정하겠지..?

 

'코딩테스트' 카테고리의 다른 글

[JAVA] 약수, 배수와 소수  (0) 2024.01.22
[JAVA] 일반 수학 1단계  (0) 2024.01.19
[JAVA] 심화 1  (0) 2024.01.17
[JAVA] 문자열  (0) 2024.01.16
[JAVA] 1차원 배열  (0) 2024.01.14