[C++] 백준 2563 색종이

2024. 3. 9. 22:33·🏆 PS(Problem Solving)/Baekjoon

1. 문제

https://www.acmicpc.net/problem/2563

 

2563번: 색종이

첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변

www.acmicpc.net

 

2. 풀이 과정

처음에는 겹치는 부분을 제외하는 식으로 넓이를 구해야 하나 생각했는데 너무 복잡한 것 같았다.

좋은 로직을 고민을 해보다가 배열의 한칸을 넓이 1로 하는 사각형으로 생각하는 식으로 2차원 배열을 떠올렸다.

2차원 배열 예시 사진
예시 사진은 11 x 11이지만 이 문제 속에서는 100 x 100 배열이다.

먼저 배경인 흰 도화지가 100x100이므로 도화지가 전부 채워진다면 색종이들의 넓이 합은 10000이 될 것이다.

100 x 100인 정사각형으로 구성되어 있는 도화지라고 생각하면서 풀이를 접근한다.

도화지에 색종이가 올려지면 해당 위치는 1로 바뀐다. 최종적으로는 1의 개수를 출력한다.

 

1. 요소가 0으로 초기화되어 있는 100 x 100 2차원 배열을 선언한다

 

2. 이중 for문을 사용하여 입력받은 x, y 좌표을 시작으로 10칸씩 위아래로 탐색한다.

    배열의 인덱스는 0부터 시작하기 때문에 탐색 시 x, y값에서 1씩을 뺀 인덱스를 탐색한다.

 

3. 탐색시 해당 배열의 요소가 0인 경우에만 그 값을 1로 바꾸고 sum값을 1 증가시킨다.

     이러면 중복된 x, y가 주어져도 이미 1로 칠해져 있기 때문에 그냥 넘어간다.

 

4. sum을 출력한다.

 

3. C++ 정답코드

#include <iostream>
using namespace std;

int main()
{
    const int SIZE = 10; //정사각형 색종이 한변의 길이 상수로 선언
    int x, y, n, sum = 0;
    int paper[100][100] = {0};
    cin >> n;
    while(n--)
    {
        cin >> x >> y;
        for (int i = x - 1; i < x + SIZE - 1; i++){
            for (int j = y - 1; j < y + SIZE - 1; j++){
                if (paper[i][j] == 0)
                {
                    paper[i][j] = 1;
                    sum++;
                }    
            }
        }
    }
    cout << sum;
    return 0;
}

'🏆 PS(Problem Solving) > Baekjoon' 카테고리의 다른 글

[C++] 백준 4949 균형잡힌 세상  (0) 2024.03.13
[C++] 백준 1427 소트인사이드  (0) 2024.03.11
[C++] 백준 18870 좌표 압축  (1) 2024.03.01
[C++] 백준 10989 수 정렬하기 3  (2) 2024.02.27
[C++] 백준 1935 후위표기식2  (0) 2024.02.24
'🏆 PS(Problem Solving)/Baekjoon' 카테고리의 다른 글
  • [C++] 백준 4949 균형잡힌 세상
  • [C++] 백준 1427 소트인사이드
  • [C++] 백준 18870 좌표 압축
  • [C++] 백준 10989 수 정렬하기 3
그해 준서는
그해 준서는
컴퓨터공학과 학생의 성장을 기록을 하는 블로그입니다.
  • 그해 준서는
    비트로 그리는 성장일기
    그해 준서는
  • 전체
    오늘
    어제
    • 분류 전체보기 (58)
      • 🏆 PS(Problem Solving) (29)
        • Baekjoon (24)
        • Programmers (0)
        • groomLevel (5)
      • 💻 Computer Science (4)
        • Data structure (3)
        • Algorithm (1)
        • Network (0)
        • OS (0)
        • DB (0)
      • 👨‍💻 Programming (22)
        • WEB (7)
        • HTML (10)
        • JavaScript (2)
        • Embedded (1)
        • C++ (2)
      • 🌍 Life (2)
        • 1일 1글쓰기 (0)
        • 오늘의 경제 (0)
        • 맛집 (0)
      • 새로고침 (0)
  • 블로그 메뉴

    • 홈
    • 글쓰기
    • 방명록
  • 링크

    • Git Hub
  • 공지사항

  • 인기 글

  • 태그

    HTML
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
그해 준서는
[C++] 백준 2563 색종이
상단으로

티스토리툴바