백준

백준 닷컴 단계 별로 풀어보기 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이 아닌 값을 가지는 수를 세고 출력한다.