문제

민식이는 다음과 같은 폴리오미노 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: ""))
}

+ Recent posts