백준
백준 닷컴 단계 별로 풀어보기 7단계
CD가참둥그렇다
2023. 10. 5. 12:30
1단계 행렬 덧셈
- N*M크기의 두 행렬 A와 B가 주어졌을 때, 두 행렬을 더하는 프로그램을 작성하시오.
- 첫째 줄부터 N개의 줄에 행렬 A와 B를 더한 행렬을 출력한다. 행렬의 각 원소는 공백으로 구분한다.
package stage07;
import java.util.Scanner;
public class Step_1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int a, b;
a = scan.nextInt();
b = scan.nextInt();
int[][] arr1 = new int[a][b];
int[][] arr2 = new int[a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
arr1[i][j] = scan.nextInt();
}
}
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
arr2[i][j] = scan.nextInt();
}
}
int[][] arrShow = new int[a][b];
for (int i = 0; i < a; i++) {
if (i != 0) {
System.out.println();
}
for (int j = 0; j < b; j++) {
arrShow[i][j] = arr1[i][j] + arr2[i][j];
System.out.print(arrShow[i][j]);
if (j != (b - 1)) {
System.out.print(" ");
}
}
}
}
}
A.
- nm 행렬이기 때문에 int[n][m]의 행렬이 3개 필요하다. 두 행렬과 합을 받을 행렬 1개
- 반복문을 통해 두 행렬에 값을 받아준다. nextInt로 받는다.
- 반복문을 통해 합을 받을 행렬에 값을 준다. 출력 형식에 맞춰 출력도 함께 한다.
2단계 최댓값
- 첫째 줄부터 아홉 번째 줄까지 한 줄에 아홉 개씩 수가 주어진다. 주어지는 수는 100보다 작은 자연수 또는 0이다.
- 첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 위치한 행 번호와 열 번호를 빈칸을 사이에 두고 차례로 출력한다. 최댓값이 두 개 이상인 경우 그 중 한 곳의 위치를 출력한다.
import java.util.Scanner;
public class Step_2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[][] arr = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
arr[i][j] = scan.nextInt();
}
}
int max=0;
int a=0, b=0;
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if (arr[i][j]>max) {
max=arr[i][j];
a=i;
b=j;
}
}
}
System.out.println(max);
System.out.println((a+1)+" "+(b+1));
}
}
A.
- nm 행렬이기 때문에 int[n][m]의 행렬이 3개 필요하다. 두 행렬과 합을 받을 행렬 1개
- 반복문을 통해 두 행렬에 값을 받아준다. nextInt로 받는다.
- 반복문을 통해 합을 받을 행렬에 값을 준다. 출력 형식에 맞춰 출력도 함께 한다.
3단계 세로 읽기
- 총 다섯줄의 입력이 주어진다. 각 줄에는 최소 1개, 최대 15개의 글자들이 빈칸 없이 연속으로 주어진다. 주어지는 글자는 영어 대문자 ‘A’부터 ‘Z’, 영어 소문자 ‘a’부터 ‘z’, 숫자 ‘0’부터 ‘9’ 중 하나이다. 각 줄의 시작과 마지막에 빈칸은 없다.
- 영석이가 세로로 읽은 순서대로 글자들을 출력한다. 이때, 글자들을 공백 없이 연속해서 출력한다.
import java.util.Scanner;
public class Step_3 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] strArr = new String[5];
for (int i=0; i<5; i++) {
strArr[i]=scan.nextLine();
}
char[][] charArr = new char[5][15];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 15; j++) {
try {
charArr[i][j] = strArr[i].charAt(j);
} catch (Exception e) {
charArr[i][j]='-';
}
}
}
String show = "";
for (int i=0; i<15; i++) {
for (int j=0; j<5; j++) {
if (charArr[j][i]!='-') {
show += charArr[j][i];
}
}
}
System.out.println(show);
}
}
A.
- 문자열 배열에 입력 받은 문자 5개를 저장한다.
- char 배열을 5*15로 초기화한다.
- 반복문을 통해 문자열 배열의 문자의 charAt으로 값을 지정한다.
- 문자 길이보다 긴 위치를 지정할 경우 에러가 발생하기 때문에 try catch로 오류가 발생 할 경우 -값을 갖도록 한다.
- 문자를 이어서 저장 할 문자를 “”로 초기화한다.
- 문자를 세로 읽기로 연결하는 반복문을 만든다. -일 경우 무시하는 조건문을 만든다.
4단계 색종이
- 색종이는 가로, 세로의 크기가 각각 10인 정사각형
- 첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변과 도화지의 왼쪽 변 사이의 거리이고, 두 번째 자연수는 색종이의 아래쪽 변과 도화지의 아래쪽 변 사이의 거리이다. 색종이의 수는 100 이하이며, 색종이가 도화지 밖으로 나가는 경우는 없다
- 첫째 줄에 색종이가 붙은 검은 영역의 넓이를 출력한다.
import java.util.Scanner;
public class Step_4 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[][] arrBig = new int[100][100];
int paper = scan.nextInt();
int[][] arrColor = new int[paper][2];
for (int i=0;i<paper;i++) {
for (int j=0; j<2; j++) {
arrColor[i][j] = scan.nextInt();
}
}
for (int i=0; i<paper; i++) {
for (int j=arrColor[i][0]; j<arrColor[i][0]+10; j++) {
for (int k=arrColor[i][1]; k<arrColor[i][1]+10; k++) {
arrBig[j][k]++;
}
}
}
int count =0;
for (int i=0; i<100; i++) {
for (int j=0; j<100; j++) {
if(arrBig[i][j]!=0) {
count++;
}
}
}
System.out.println(count);
}
}
A.
- 큰 종이 100100를 나타낼 2차원 int 배열 100100을 초기화한다.
- 색종이의 수를 받아준다.
- 2차원 int 배열을 만들고 종이 수*2의 배열로 초기화한다.
- 반복문을 통해 색종위 좌하단의 좌표를 각 배열에 저장한다.
- 3중 반복문을 만들고 가장 바깥쪽은 종이의 수 만큼, 중간은 가로 좌표부터 +10까지, 마지막은 세로 좌표부터 +10까지 반복문을 만들고 해당 위치의 큰 종이의 값에 +1을 해주는 반복문을 만든다.
- 색종이로 덮인 넓이를 세줄 int count를 0으로 초기화한다.
- 반복문을 통해 큰 종이에서 0이 아닌 값을 가지는 수를 세고 출력한다.