---
id: "imported/blog/history/grt/grt-week2_2"
title: "구름톤 챌린지 2주 차 학습 일기 - 2"
description: "구름 이라는 곳에서 문제 풀이 챌린지(구름톤 챌린지)를 한다고 해서 참여 중이다. 이벤트 기간 동안 문제가 꾸준이 올라오며, 주에 2회씩 (혹은 그 이상) 챌린지 문제들에 대해 풀이가 가능한 문제들을 풀이해보고, 후기를 남겨보려고 한다."
kind: "record"
published: "2023-08-22T00:00:00.000Z"
tags: ["PS","구름톤"]
url: "https://www.readiz.com/blog/history/grt/grt-week2_2/"
markdownUrl: "https://www.readiz.com/blog/history/grt/grt-week2_2/index.md"
---

# 구름톤 챌린지 2주 차 학습 일기 - 2

## 구름톤 챌린지란?

`구름` 이라는 곳에서 문제 풀이 챌린지(구름톤 챌린지)를 한다고 해서 참여 중이다. 이벤트 기간 동안 문제가 꾸준이 올라오며, 주에 2회씩 (혹은 그 이상) 챌린지 문제들에 대해 풀이가 가능한 문제들을 풀이해보고, 후기를 남겨보려고 한다.

- 문제 푸는 곳: <https://level.goorm.io/l/challenge/goormthon-challenge>
- 학습 일기 작성 가이드: <https://goorm.notion.site/5ad9e8eef00f4c19b083572c2000d7f8>
- 풀이 사용 컨테이너(구름 컨테이너): <https://goor.me/8jsC9vbx5TCeaCcRA>

## 문제 풀이

- 문제 제목: 구름 찾기 깃발
- 문제 링크: <https://level.goorm.io/exam/195689/%EA%B5%AC%EB%A6%84-%EC%B0%BE%EA%B8%B0-%EA%B9%83%EB%B0%9C/quiz/1>

### 풀이 접근

`PS`를 하다보면 높은 확률로 마주치게 되는 전형적인 2차원 맵 탐색 문제. 보통 이런 유형은 `dx`, `dy`를 도입해서 각 방향을 편하게 순회한다. 그리고, 좋은 테크닉이 하나 있는데 경계선에 여유를 두라는 것이다. 예를 들어 $[1, N]$ 구간의 배열을 쓰도록 하면 $0$과 $N+1$이 경계선이 되고, 이 경계선에는 $0$을 채워두면 답에 변함이 없고(문제에 따라 다를 수는 있다), 탐색할 때 경계선 예외처리를 하지 않아도 돼서 구현이 훨씬 편해진다.

이러한 점만 잘 익히고 있다면 매우 쉽게 통과 가능한 문제이다. 집가서 간만에 지뢰찾기 해야지..

### 샘플 정답 코드

```cpp
#include <stdio.h>

int dx[8] = {0, 1, 1, 1, 0, -1, -1, -1};
int dy[8] = {1, 1, 0, -1, -1, -1, 0, 1};
int map[1002][1002];
int main() {
    int N, K; scanf("%d %d", &N, &K);
    for(int y = 1; y <= N; ++y) {
        for(int x = 1; x <= N; ++x) {
            scanf("%d", &map[y][x]);
        }
    }
    int ans = 0;
    for(int y = 1; y <= N; ++y) {
        for(int x = 1; x <= N; ++x) {
            if (map[y][x] == 0) {
                int ck = 0;
                for(int k = 0; k < 8; ++k) {
                    if (map[y + dy[k]][x + dx[k]] == 1) ++ck;
                }
                if (ck == K) ++ans;
            }
        }
    }
    printf("%d\n", ans);

    return 0;
}
```
