View

 

알고리즘 분류: 구현, 그리디 알고리즘

문제 링크: https://www.acmicpc.net/problem/1343

 

1343번: 폴리오미노

첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.

www.acmicpc.net

 

 

 

 

 

【 풀이 】

  1. 입력받을 보드판과 최종 결괏값을 선언한다(string).
  2. '.' 이 나올 때까지 순회한다.
  3. 한 글자씩 검사해, 글자가 'X'이면 카운트를 센다.
  4. '.' 이 나왔을 때 카운트가 홀수이면 반복문을 빠져나와 -1 을 출력한다.
  5. '.' 이 나왔을 때 카운트가 짝수이면 결괏값에 '.' 추가
  6. 카운트가 2가 되면 결과값에 "BB" 추가
  7. 카운트가 4가 되면 결과값에 "AAAA" 추가
  8. 최종 결과 출력

 

 

【 코드 】

#include<iostream>
#include<algorithm>
using namespace std;

int main() {
	int cnt = 0;

	string	board;
	string	output;

	cin >> board;

	// 보드 순회
	for (int i = 0; i != board.size(); i++) {
		if (board[i] == 'X') { cnt++; }

		if (board[i] == '.') { output += '.';

			if (cnt % 2 != 0) { break; }
			else		{ cnt = 0; }
		}
		
		// 글자수가 2가 되면
		if (cnt == 2 && board[i + 1] != 'X'){
			output += "BB";		cnt = 0;
		}

		// 글자수가 4가 되면
		if (cnt == 4){
			output += "AAAA";	cnt = 0;
		}
	}

	if (cnt % 2 == 1) cout << -1; 
	else		  cout << output;

	return 0;
}

 

 

 

728x90
Share Link
reply
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31