https://www.acmicpc.net/step/2
오늘은 일반 수학1을 단계별 문제로 풀었다.
2차원 배열 총 4문제를 풀었다.
이번에는 일차원 배열과는 다르게 2차원이므로 신경써야할 것이 조금 더 있었다.
풀었던 문제중에서 인상깊었던 문제 몇 개를 적어본다.
백준 2566 - 최댓값
https://www.acmicpc.net/problem/2566
문제분석
문제를 요약하자면,
9 x 9 격자판에 81개의 자연수 혹은 0이 주어진다(입력). 이들 중 최댓값을 찾아서 몇 행 몇 열의 수인지 구하면 된다.(출력)
9 x 9 의 크기를 가지는 2차원 배열이다.
그러면 간단하게 행, 열을 순회하면서 max 변수를 준비해서 max보다 해당 인자가 크다면, max로 지정하고 x, y의 값을 배열을 순회하는 i, j값으로 하면 될 것이다.
정답
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int nums[][] = new int[10][10];
int max = 0;
int x = 0, y = 0;
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
{
nums[i][j] = sc.nextInt();
if (max < nums[i][j])
{
max = nums[i][j];
x = i; y = j;
}
}
}
System.out.println(max);
System.out.println((x + 1) + " " + (y + 1));
}
}
[10][10]의 크기를 가지는 이차원 배열 nums를 준비해준다.
i, j 를 반복하면서 입력값을 받고, 해당값이 max보다 크다면 해당 값으로 저장하고, i ,j 를 x,y로 저장한다.
출력은 max와 x,y에 1을 더해서 출력한다.(인덱스가 아닌 좌표여야 하므로)
백준 2563 - 색종이
https://www.acmicpc.net/problem/2563
문제분석
문제를 요약하자면,
가로 세로가 10인 색종이를 겹쳐서 색종이가 겹친 부분을 포함한 부분의 넓이를 구하는 문제이다.
색종이의 좌측 하단의 좌표가 주어진다.
그러므로, x, y 가 주어진다면, x+10, y+10이 주어진 색종이의 범위이다.
색종이가 붙을 boolean형 도화지 2차원 배열을 준비한다.
주어진 색종이의 범위를 순회하면서 넓이에 1을 더하고, 좌표를 도화지에 true로 처리한다.
만약 거쳐간 곳임을 확인하기 위해서 이 과정은 true가 아닌 곳에서만 행한다.
정답
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int total = 0; //검은 영역의 넓이
int n = Integer.parseInt(br.readLine()); //색종이 개수
boolean[][] arr = new boolean[101][101]; //도화지
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
//(x,y)부터 (x+9, y+9)까지의 영역을 하나씩 체크한 후 총 넓이에 더해준다.
for (int j = x; j < x+10; j++) {
for (int k = y; k < y+10; k++) {
if (!arr[j][k]) {
arr[j][k] = true;
total++;
}
}
}
}
System.out.print(total);
}
}
문제 분석에 대해서 충실하게 행한다.
이렇게 true로 지나온 곳을 판단하면 겹치는 곳을 중복없이 넓이를 구할 수 있다.
'Code Test > Java' 카테고리의 다른 글
백준 단계별 풀이 - 일반 수학1 (1) | 2023.12.31 |
---|---|
백준 단계별 풀이 - 심화1 (1) | 2023.12.27 |
백준 단계별 풀이 - 문자열 (1) | 2023.12.23 |
백준 단계별 풀이 - 반복문, 1차원 배열 (1) | 2023.12.21 |
백준 단계별 풀이 - 입출력과 사칙연산, 조건문 (0) | 2023.12.19 |