반응형
    
    
    
  1343번: 폴리오미노
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
www.acmicpc.net
greedy 문제였습니다.
풀이방법
1. '.'이 있는 좌표, 끝에 도당했다면 끝의 좌표 + 1을 queue에 저장합니다.
2. queue가 빌 때까지 다음을 수행합니다.
2-1. piv를 4개씩 보고 옮겨주면서 queue front()까지 "AAAA"를 정답 변수 ans에 붙입니다.
2-2. piv를 2개씩 보고 옮겨주면서 queue front()까지 "BB"를 정답 변수 ans에 붙입니다.
2-3. '.'을 ans에 붙입니다.
2-4. piv를 queue의 front() + 1로 갱신해줍니다.
2-5. pop()해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
string board;
string ans;
queue <int> dots;
int piv;
int main(){
    cin >> board;
    for(int i = 0; i < board.size(); i++){
        if(board[i] == '.') dots.push(i);
        if(i == board.size() - 1) dots.push(i + 1);
    }
    while(!dots.empty()){
        int cnt = 0;
        for(int i = piv; i < dots.front(); i++){
            cnt++;
            if(cnt == 4){
                ans += "AAAA";
                cnt = 0;
                piv = i + 1;
            }
           
        }
        
        cnt = 0;
        for(int i = piv; i < dots.front(); i++){
            cnt++;
            if(cnt == 2){
                ans += "BB";
                cnt = 0;
                piv = i + 1;
            }
        }
        if(cnt) { cout << -1; return 0;}
        if(dots.front() < board.size() && board[dots.front()] == '.') ans += '.';
        piv = dots.front() + 1;
        dots.pop();
    }
   
    cout << ans << '\n';
}
'Algorithm > Greedy' 카테고리의 다른 글
| (C++) - 백준(BOJ) 11608번 : Complexity (0) | 2021.08.03 | 
|---|---|
| (C++) - 프로그래머스(Summer/Winter Coding(~2018)) : 기지국 설치 (0) | 2021.06.23 | 
| (C++) - 백준(BOJ) 1138번 : 한 줄로 서기 (0) | 2021.05.02 | 
| (C++) - 백준(BOJ) 1339번 : 단어 수학 (0) | 2021.04.17 | 
| (C++) - 백준(BOJ) 14659번 : 한조서열정리하고옴ㅋㅋ (0) | 2021.04.11 |