Categories: 백준

백준 2567 색종이 – 2 (자바 Java)

백준 2567 색종이 – 2

문제 정보

  • 문제 출처 : 백준 Baekjoon
  • 문제 번호 : 2567
  • 문제 제목 : 색종이 – 2
  • 문제 난이도 : 실버4
  • 풀이 언어 : Java

문제

가로, 세로의 크기가 각각 100인 정사각형 모양의 흰색 도화지가 있다. 이 도화지 위에 가로, 세로의 크기가 각각 10인 정사각형 모양의 검은색 색종이를 색종이의 변과 도화지의 변이 평행하도록 붙인다. 이러한 방식으로 색종이를 한 장 또는 여러 장 붙인 후 색종이가 붙은 검은 영역의 둘레의 길이를 구하는 문제

접근

2차원 배열과 중첩 for 문을 활용해 문제를 풀었다.

풀이

  • 100×100 크기의 2차원 배열을 생성한다.
  • 색종이의 수를 입력 받는다.
  • 입력 받은 색종이의 위치에 해당하는 배열의 위치에 색종이를 표시한다. 여기서 색종이는 배열에서 1의 값을 갖는다고 가정한다.
  • 배열을 순회하며 각 색종이 셀의 상, 하, 좌, 우를 검사한다. 이때 배열의 범위를 벗어나거나 색종이가 없는 부분(0)을 만나면 가장자리로 간주하여 길이를 증가시킨다.
  • 계산된 가장자리의 길이를 출력한다.

후기

2차원 배열을 활용한 문제를 더 풀어봐야겠다.

코드

Java
import java.util.Scanner;

public class Main {
 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[][] grid = new int[100][100];

        int N = sc.nextInt();

        for (int i = 0; i < N; i++) {
            int x = sc.nextInt();
            int y = sc.nextInt();

            for (int j = 0; j < 10; j++) {
                for (int k = 0; k < 10; k++) {
                    grid[x + j][y + k] = 1;
                }
            }
        }

        int perimeter = 0;
        int[] dx = {1, -1, 0, 0};
        int[] dy = {0, 0, 1, -1};

        for (int i = 0; i < 100; i++) {
            for (int j = 0; j < 100; j++) {
                if (grid[i][j] == 1) {
                    for (int k = 0; k < 4; k++) {
                        int nx = i + dx[k];
                        int ny = j + dy[k];

                        if (nx < 0 || ny < 0 || nx >= 100 || ny >= 100 || grid[nx][ny] == 0) {
                            perimeter++;
                        }
                    }
                }
            }
        }

        System.out.println(perimeter);
 }
}
Java
suover

Recent Posts

그림으로 쉽게 배우는 자료구조와 알고리즘: 미션1 | 메모리 검색

들어가며 소프트웨어를 개발할 때 메모리 관리 방식은 프로그램의 안정성과 성능을 좌우하는 핵심 요소입니다. 특히 자바스크립트,…

10시간 ago

만들면서 쉽게 배우는 컴퓨터 구조: 미션1 | 진리표부터 회로 구현까지

들어가며 소프트웨어 개발자는 코드가 어떻게 실행되는지 정확히 이해해야 할 필요가 있습니다. 우리가 작성한 프로그램은 결국…

1일 ago

웹 서버(Web Server)와 WAS(Web Application Server) 알아보기

서론 현대 웹 애플리케이션 아키텍처에서 웹 서버(Web Server) 와 웹 애플리케이션 서버(WAS, Web Application Server)…

1개월 ago

HTTP 헤더(Header)란 무엇인가?

HTTP 헤더(Header)란? HTTP(Header)는 클라이언트와 서버 간에 교환되는 메타데이터로, 요청(Request)과 응답(Response)에 부가적인 정보를 실어 나르는 역할을…

2개월 ago

인프런 워밍업 클럽 스터디 3기 – 백엔드 클린 코드, 테스트 코드 후기

Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…

2개월 ago

인프런 워밍업 클럽 스터디 3기 – 백엔드 클린 코드, 테스트 코드 4주차 회고

Readable Code: 읽기 좋은 코드를 작성하는 사고법Practical Testing: 실용적인 테스트 가이드 강의와 함께한 인프런 워밍업 클럽…

2개월 ago