코딩테스트/백준
BOJ-1343 폴리오미노 Swift
Jenikeju2552
2023. 5. 27. 08:23
문제
민식이는 다음과 같은 폴리오미노 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: ""))
}