문제
민식이는 다음과 같은 폴리오미노 2개를 무한개만큼 가지고 있다. AAAA와 BB
이제 '.'와 'X'로 이루어진 보드판이 주어졌을 때, 민식이는 겹침없이 'X'를 모두 폴리오미노로 덮으려고 한다. 이때, '.'는 폴리오미노로 덮으면 안 된다.
폴리오미노로 모두 덮은 보드판을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 보드판이 주어진다. 보드판의 크기는 최대 50이다.
출력
첫째 줄에 사전순으로 가장 앞서는 답을 출력한다. 만약 덮을 수 없으면 -1을 출력한다.
내가 푼 풀이
- 주어진 보드판을 해당 폴리오미노로 바꾸면된다.
- 사전순으로 앞서는 답을 출력하기위해, A로 바꿀수있다면 최대한 A로 바꿔주면 된다.
import Foundation
var input = readLine()!
var arr = input.map{ String($0)}
var result = [String]()
var idx = 0
// 폴리오미노 덮기
// AAAA로 바꿀수 있다면 최대한 바꿔준다.
// 폴리오미노 둘다 길이가 2로 나눠지므로 만약 2로 나눠지지 않는다면 덮을 수 없다고 판단한다.
while idx < arr.count {
if arr[idx] == "." {
result.append(arr[idx])
idx += 1
continue
}
var count = 0
while idx < arr.count && arr[idx] == "X" {
count += 1
idx += 1
}
while count > 0 {
if count % 2 != 0 {
result = ["-1"]
break
} else if count >= 4 {
count -= 4
result.append("AAAA")
} else {
count -= 2
result.append("BB")
}
}
}
if result.contains("-1") {
print("-1")
} else {
print(result.joined(separator: ""))
}
'코딩테스트 > 백준' 카테고리의 다른 글
BOJ-1520 내리막 길 Swift (0) | 2023.05.29 |
---|---|
BOJ-1012 유기농 배추 Swift (0) | 2023.05.27 |
BOJ-11722 가장 긴 감소하는 부분 수열 Swift (0) | 2023.05.27 |
BOJ-2667 단지번호붙이기 Swift (1) | 2023.05.26 |
BOJ-1783 병든 나이트 Swift (0) | 2023.05.26 |