[백준 BOJ] 2508번 사탕 박사 고창영 (C++/cpp)

2024. 2. 1. 17:27PS (Program Solving)/BOJ (백준)

문제 설명

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

 

2508번: 사탕 박사 고창영

창영이가 드디어 취직을 했다!! 그가 30세까지 취직을 안하던 이유는 바로 마음에 다니는 직장을 찾지 못해서였다. 이번에 창영이가 취직한 곳은 사탕 공장이다. 사탕 공장에 다니면 사탕 처럼

www.acmicpc.net

백준 BOJ 2508번 사탕 박사 고창영 문제 사진1
백준 BOJ 2508번 사탕 박사 고창영 문제 사진2

 

접근 방법 - 문자열에 대한 브루트포스 알고리즘 문제

백준의 2508번 문제는 간단한 문자열 탐색 브루트포스 알고리즘 문제이다.

해당 문제는, 입력으로 주어지는 값에 대해 사탕 이모티콘이 총 몇 개 있는지를 구하여 출력해야 하는 문제이다.

이때 사탕은 위 문제 조건에 제시되어 있는 것처럼 각각 가로, 세로로 나열되어 있을 수 있다.

힌트에 있는 것처럼 가로, 세로 사탕이 겹치는 입력이 없다는 전제가 있기 때문에, 입력값을 하나씩 탐색하며 찾아내기만 하면 되는 문제이다.

필자와 같은 경우에는, 가로 및 세로로 나열된 사탕의 끝부분을 찾으면 그 부분을 기점으로 사탕 모양이 있는지 탐색하는 식으로 문제를 해결해 보았다.

자세한 설명은 아래로 작성하니, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 코드와 설명을 참고해 보길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 테스트 케이스의 개수(t)를 입력받는다.

 

2) t의 크기만큼, 반복문을 실행하여 아래의 연산을 취한다.

- 가로 및 세로(n, m), 그리고 행렬(ch)을 입력받는다.

이때, 각 테스트 케이스의 입력값들 간 충돌이 발생하지 않도록, 입력을 수행하기 이전에 getchar()를 사용하였다.

- 사탕의 개수를 저장할 변수 count를 0으로 초기화하여 선언한다.

- ch의 문자값들을 하나씩 탐색하면서, 사탕의 끝부분을 찾아낸다.

만약 탐색 중 '<'를 찾아내었다면, 왼쪽 방향으로 이전값이 연속으로 '>', 'o'인지 확인한다. 맞다면 count에 1을 추가한다.

만약 탐색 중 '^'를 찾아내었다면, 위쪽 방향으로 이전값이 연속으로 'v', 'o'인지 확인한다. 맞다면 count에 1을 추가한다.

- 위 탐색 및 연산이 모두 끝났다면, 현재 저장되어 있는 count의 값을 출력한다.

 

3) 2)의 연산이 모두 완료되었다면, 실행 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 2508번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);

    int t;
    scanf("%d", &t);

    for (int i = 0; i < t; i++) {
        getchar();

        int n, m;
        scanf("%d %d ", &n, &m);

        int count = 0;
        char ch[401][401] = { 0 };
        for (int a = 0; a < n; a++) {
            scanf("%s", ch[a]);
        }

        for (int a = 0; a < n; a++) {
            for (int b = 0; b < m; b++) {
                if (ch[a][b] == '^' && ch[a - 1][b] == 'o' && ch[a - 2][b] == 'v') { count++; }
                else if (ch[a][b] == '<' && ch[a][b - 1] == 'o' && ch[a][b - 2] == '>') { count++; }
            }
        }

        cout << count << endl;
    }
}

 

제출 결과

백준 BOJ 2508번 사탕 박사 고창영 문제 C++ 제출 결과

(2024.01.08 백준 2508번 문제 제출 결과)

반응형