안녕하세요~
오늘은 7단계 2차원 배열을 푸는 날입니다!
✏️ 문제 번호 : 2738
행렬 덧셈
문제 살펴보기
N*M 크기의 두 행렬 A와 B
첫째 줄 N(행)과 M(열)
둘째 줄부터 N개의 줄에 행렬 A의 원소 M개
이어서 N개의 줄에 행렬 B의 원소 M개
각 행렬 A와 행렬 B의 N번째 줄을 더한 행렬을 출력하기
행렬 A + 행렬 B --> 출력
1 1 1 3 3 3 4 4 4
2 2 2 4 4 4 6 6 6
0 1 0 5 5 100 5 6 100
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int M = Integer.parseInt(input[1]);
int[][] matrixA = new int[N][M];
int[][] matrixB = new int[N][M];
for (int i = 0; i < N; i++) {
String[] line = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
matrixA[i][j] = Integer.parseInt(line[j]);
}
}
for (int i = 0; i < N; i++) {
String[] line = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
matrixB[i][j] = Integer.parseInt(line[j]);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
sb.append(matrixA[i][j] + matrixB[i][j]).append(" ");
}
sb.append("\n");
}
System.out.print(sb);
}
}
풀이 과정
N(행), M(열)을 입력 받고 행렬 A,B 2차원 배열을 만듭니다.
그 후, 각 행렬마다 N,M을 입력 받습니다.
StringBuilder를 사용해서 각 행의 값을 공백으로 구분한 후
각 행을 더했습니다.
✏️ 문제 번호 : 2566
최댓값
문제 살펴보기
9*9 격자판, 81개의 자연수
최댓값이 몇 열, 몇 행에 위치하는지 출력하기
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int[][] board = new int[9][9];
int max = Integer.MIN_VALUE;
int maxRow = 0;
int maxCol = 0;
for(int i=0;i<9;i++){
String[] input = br.readLine().split(" ");
for(int j=0;j<9;j++){
board[i][j]=Integer.parseInt(input[j]);
if(board[i][j]>max){
max = board[i][j];
maxRow = i + 1;
maxCol = j + 1;
}
}
}
System.out.println(max);
System.out.println(maxRow + " " + maxCol);
}
}
풀이 과정
격자판 board 행,열을 9*9로 만듭니다.
최대값을 찾기 위해, max변수와
최대값을 저장할 행,열 변수도 만듭니다.
for문을 통해 자연수를 입력 받고,
board[i][j]가 max보다 클 경우, max에 값을 저장하고,
행,열 번호도 저장합니다.
이 때, 행 열 번호는 1부터 시작하므로 1을 더해줍니다.
✏️ 문제 번호 : 10798
세로읽기
문제 살펴보기
글자, 영어 대소문자, 숫자0~9 입력 받기
총 다섯 줄의 입력 주어짐.
각 줄에는 최소 1개 ~ 최대 15개의 글자들을 빈칸 없이 연속으로 주어짐
각 줄의 시작과 마지막에 빈칸은 없다.
출력할 때 세로로 읽은 순서대로 글자들을 출력한다.
이 때, 글자들을 공백 없이 연속해서 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
char[][] board = new char[5][15];
for (int i = 0; i < 5; i++) {
String line = br.readLine();
for (int j = 0; j < line.length(); j++) {
board[i][j] = line.charAt(j);
}
// 빈 부분은 공백으로
for (int j = line.length(); j < 15; j++) {
board[i][j] = ' ';
}
}
StringBuilder result = new StringBuilder();
for (int col = 0; col < 15; col++) {
for (int row = 0; row < 5; row++) {
if (board[row][col] != ' ') {
result.append(board[row][col]);
}
}
}
System.out.println(result.toString());
}
}
풀이 과정
5개의 열, 최대 15개의 행을 입력 받는 2차원 배열을 만듭니다.
행을 입력 받을 때, 문자열 길이를 확인해서
입력 받지 못한 부분은 공백으로 처리합니다.
세로로 읽기 위해서 각 열을 기준으로 행을 순서대로 읽습니다.
만약 공백이 있다면 추가하지 않고,
공백 없는 문자들을 result에 추가합니다.
✏️ 문제 번호 : 2563
색종이
문제 살펴보기
가로, 세로 크기가 각각 100인 정사각형 모양의 흰색 도화지
도화지 위에 가로, 세로 크기가 각각 10인 정사각형 모양 검은색 색종이 붙임
검은색 색종이를 여러 장 붙인 후,
색종이가 붙은 검은 영역의 넓이를 구하자!
입력 값의 분석은 다음과 같습니다.
//첫째 줄에 색종이의 수
3
// 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치 주어짐
3 7
15 7
5 2
/*
3, 15, 5 : 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리 = x축
7, 7, 2 : 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리 = y축
*/
출력 값은 색종이가 붙은 검은 영역의 넓이를 출력해야합니다.
붙인 검정 색종이는 가로 세로 크기가 10입니다.
색종이가 붙은 검은 영역의 넓이를 출력해야하므로,
각 색종이의 해당하는 면적을 더해야합니다.
이 때, 겹치는 색종이의 배열 칸도 있을 것입니다.
검정 색종이 영역은 1, 아닌 부분은 0으로 생각해서 계산을 합니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int[][] canvas = new int[100][100];
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N; i++) {
String[] input = br.readLine().split(" ");
int x = Integer.parseInt(input[0]);
int y = Integer.parseInt(input[1]);
for (int j = x; j < x + 10; j++) {
for (int k = y; k < y + 10; k++) {
canvas[j][k] = 1;
}
}
}
int black = 0;
for (int i = 0; i < 100; i++) {
for (int j = 0; j < 100; j++) {
if (canvas[i][j] == 1) {
black++;
}
}
}
System.out.println(black);
}
}
풀이 과정
흰색도화지(canvas) 넓이는 가로, 세로 100이므로
0으로 초기화된 canvas[100][100] 2차원 배열을 만들어 줍니다.
검은색종이 넓이는 가로, 세로 10이므로
for문을 x,y를 10 더한 만큼 순회합니다.
canvas에 색칠됐기 때문에 값을 1로 바꿔줍니다.
그 후, canvas가 1인 값의 개수를 세어 결과를 출력합니다.
이처럼 오늘은 백준 7단계를 풀어봤습니다 ~
저는 다음 8단계 문제로 돌아오겠습니다 😉
오코완
(오늘도 코테 공부 완료)
'알고리즘 > 백준' 카테고리의 다른 글
[단계별로 풀어보기-Java] 9단계 약수, 배수와 소수 (에라토스테네스의 체 사용) (0) | 2025.02.02 |
---|---|
[단계별로 풀어보기-Java] 8단계 일반 수학1 (0) | 2025.01.30 |
[단계별로 풀어보기-Java] 6단계 심화1 (1) | 2025.01.22 |
[단계별로 풀어보기-Java] 4단계 1차원 배열 (4) | 2025.01.17 |
[단계별로 풀어보기-Java] 3단계 반복문 (+ EOF 처리) (0) | 2025.01.16 |