https://www.acmicpc.net/problem/2563
넓이가 각각 100인 색종이 n개가 주어질 때, 겹치는 부분을 제외한 총 넓이를 출력하면 된다.
#include <iostream>
#include <string>
using namespace std;
//4. int arr[100][100]; -> 통과 됨.
int main(){
int n;
cin >> n;
int answer = 0;
// 1. int arr[100][100]; -> 통과 안됨!!
int arr[100][100] = {0,}; // 2. -> 통과 됨.
// 3. int arr[101][101]; -> 통과 됨.
for (int i=0;i<n;i++){
int x, y;
cin >> x >> y;
for (int j=x;j<x+10;j++){
for (int k=y;k<y+10;k++){
if (arr[j][k] != 1){
arr[j][k] = 1;
answer += 1;
}
}
}
}
cout << answer;
}
일단, 문제에서 주어진 도화지 크기만큼의 배열을 선언 후, 각 인덱스를 순회하며 이미 색종이가 덮인 부분이면 넘어가고, 색종이가 덮이지 않은 부분이면 넓이에 1을 더해주는 방식으로 해결.
하지만, int arr[100][100]; 처음엔 main 함수 내에 선언했더니 통과가 되지 않았지만, 전역 변수로 선언하니 통과가 되었다. 이유를 찾아보니 전역변수는 초기화 하지 않아도 0으로 초기화 된다고 해서 납득했지만, 문제는 그 다음이었다.
int arr[101][101];을 main 내에 선언했는데 통과가 되었다. 여기서 의문이 발생하게 된다.
쓰레기 값이 들어갔기 때문에 통과가 안됐는데, 왜 배열의 크기를 한칸 늘려주면 통과가 되는 걸까? 만약 크기 문제였다면 전역변수 또한 100 x 100으로 선언했을 때 통과가 안되어야 하는거 아닌가?
해당 의문은 아직 미해결 중.
'알고리즘 > 백준' 카테고리의 다른 글
백준 11005 진법 변환 2 [C++] (0) | 2023.11.26 |
---|---|
백준 2745번 진법 변환 [C++] (1) | 2023.11.26 |
백준 10798번 세로읽기 [C++] (0) | 2023.11.25 |
백준 25206번 너의 평점은 [C++] (0) | 2023.11.23 |
백준 1316번 그룹 단어 체커 [C++] (0) | 2023.11.23 |