반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- java
- 자바개념
- 빅오 표기법
- 자바의정석연습문제풀이
- 자바의정석연습문제
- 시간 복잡도
- BFS
- 무료코딩강의
- 알고리즘공부
- 자바공부
- ☆
- 백준알고리즘
- 알고리즘
- 백준
- 코딩공부
- 동적계획법
- 백트래킹
- 브루트포스
- dfs
- ★
- Java개념
- 자바의정석
- dp
- 무료개발강의
- 백준자바
- 자바
- 백준9단계
- 개발공부
- 백준단계별로풀어보기
- 다이나믹 프로그래밍
Archives
- Today
- Total
더 많이 실패하기
공부 106일차: 백준 2563번 색종이 자바 java 본문
반응형
2563 색종이
https://www.acmicpc.net/problem/2563
2563번: 색종이
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변
www.acmicpc.net
백준 단계별로 풀어보기 9단계 2차원 배열 (3) 2563번 문제 색종이
문제
오답 &과정 생각해보기
오답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 색종이의 수
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[n][2];
for(int i = 0; i < n; i++) {
//StringTokenizer는 한 줄씩 인식
st = new StringTokenizer(br.readLine());
arr[i][0] = Integer.parseInt(st.nextToken());
arr[i][1] = Integer.parseInt(st.nextToken());
}
// 디버깅
System.out.println(Arrays.deepToString(arr));
int sum = n*100;
for(int i = 0; i < n; i++) {
for(int j = 1; j < n; j++) {
if( (arr[j][0] < arr[i][0]+10 && arr[i][0]+10 < arr[j][0]+10) && (arr[j][1] < arr[i][1] && arr[i][1] < arr[j][1]+10)) {
sum -= Math.abs(arr[i][0]+10-arr[j][0]) * Math.abs(arr[j][1]+10-arr[i][1]);
}
}
}
System.out.println(sum);
}
}
|
cs |
예제를 보고 이런 식으로 생각해서 짜던 코드였는데,
이러면 겹치는 경우를 모두 if문 조건에 넣어야 한다는 것을 깨닫고.. 예제의 경우에 해당하는 조건만 넣어봤다가 바로 방법을 바꿨다
(혹시 몰라서 제출하긴 했다 ㅎ)
그래서 생각, 검색해보다가 찾은 결론은 각 좌표의 넓이를 1로 보고 하나하나 살펴보면서 더하는 것
즉,
1. x~x+10, y~y+10 반복문을 돌리면서 해당 좌표가 이미 칠해졌는지 아닌지(0인지 아닌지) 확인
2. 만약 전에 칠해지지 않았다면 1*1 정사각형의 넓이값인 1을 주고, 넓이에 더한다
정답 인정 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
// 색종이의 수
int n = Integer.parseInt(br.readLine());
int[][] paper = new int[100][100];
int area = 0; //넓이 변수
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());
for(int j = x; j < x + 10; j++) { //x좌표 한줄당
for(int k = y; k < y + 10; k++) { //y좌표 모두 확인
if(paper[j][k] == 0) { //아직 해당 좌표가 칠해지지 않았다면
paper[j][k] = 1; //칠하고
area++; //넓이에 더하기
}
}
}
}
System.out.println(area);
}
}
|
cs |
과정 설명이 이해가 가지 않을까 싶어 주석에 설명을 많이 넣어봤다
처음 생각해본 방법이 너무 바보 같아서 혼자 헛웃음.. 브론즈 1 문제인데 엄청 돌아가서 생각한 것 같다
반응형
'알고리즘 > 백준' 카테고리의 다른 글
공부 108일차: 백준 5597번 과제 안 내신 분..? 자바 java (0) | 2022.11.15 |
---|---|
공부 107일차: 백준 10807번 개수 세기 자바 java (0) | 2022.11.14 |
공부 105일차: 백준 2566번 최댓값 자바 java (0) | 2022.11.12 |
공부 104일차: 백준 2738번 행렬 덧셈 자바 java (0) | 2022.11.11 |
공부 103일차: 백준 1541번 잃어버린 괄호 자바 java (0) | 2022.11.10 |
Comments