본문 바로가기

Algorithm/Greedy

(C++) - 백준(BOJ) 1388 : 바닥 장식

반응형

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

 

1388번: 바닥 장식

형택이는 건축가이다. 지금 막 형택이는 형택이의 남자 친구 기훈이의 집을 막 완성시켰다. 형택이는 기훈이 방의 바닥 장식을 디자인했고, 이제 몇 개의 나무 판자가 필요한지 궁금해졌다. 나

www.acmicpc.net

greedy로 푼 문제였습니다.

 

📕 풀이방법

📔 입력 및 초기화

n행 m열을 선언 후 입력한 다음 이차원 배열 room에 n행 m열만큼 구조를 입력해줍니다. 체크 배열 ck도 선언해줍니다.

 

📔 풀이과정

 0행 0열부터 시작해 체크가 안되어있으면 다음을 수행합니다.

 1. 체크가 안된 위치가 i행 j열인 경우 ans++ 후 그 값을 변수 shape에 저장합니다.

 2. shape이 '-'라면 '|'가 나오기 전까지 열을 끝까지 loop를 돌며 check해줍니다.

 3. shape이 '|'라면 '-'가 나오기 전까지 행을 끝까지 loop를 돌며 check해줍니다.

📔 정답출력

ans를 출력합니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
int n, m, ck[101][101], ans;
char room[101][101];

int main(){
    cin >> n >> m;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            cin >> room[i][j];

    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(ck[i][j]) continue;
            ans++;
            ck[i][j] = 1;
            char shape = room[i][j];
            if(shape == '-'){
                for(int k = j + 1; k < m; k++){
                    if(room[i][k] == '|') break;
                    ck[i][k] = 1;
                }
            }
            else{
                for(int k = i + 1; k < n; k++){
                    if(room[k][j] == '-') break;
                    ck[k][j] = 1;
                }
            }
        }
    }
    cout << ans;
}