[Swift]白駿2138-電球とスイッチ
問題のショートカット
に答える
例えば、スイッチA、B、C、3つのスイッチが入っています.
A B C
0 0 0
この場合.
A B C
X X 0
スイッチBを押す
A B C
0 0 X
スイッチCを押す
A B C
0 X 0
スイッチを押した後、ロック状態のスイッチは押したスイッチではありません.
つまり、押したスイッチが前のスイッチです.
スイッチBの状態はBを押すと0になりますが、Cを押すと最終的にXになります.
従って、iスイッチ
current[i-1] != future[i-1]の場合はクリックしてください.
for i in 1..<N {
if current[i-1] != future[i-1] {
// 스위치 누름
count += 1
}
}
ただし、iが0のときに最初のスイッチを押す場合は考えられません.0番目のスイッチは押されても押されなくてもよいので、押すと2回押さないように分けて演算することができます.
コミットされたコード
import Foundation
let N = Int(readLine()!)!
var current = Array(readLine()!).map{Int(String($0))!}
var future = Array(readLine()!).map{Int(String($0))!}
var result = Int.max
func isSame(_ current: [Int]) -> Bool {
var temp = current
var count = 0
for i in 1..<N {
if temp[i-1] != future[i-1] {
var changeRange = [i-1,i,i+1]
if i == (N-1) {
changeRange = [i-1, i]
}
for j in changeRange {
temp[j] = temp[j] == 0 ? 1 : 0
}
count += 1
}
}
let isSame = temp == future
result = isSame ? min(result, count) : result
return isSame
}
if isSame(current) {
print(result)
} else {
current[0] = current[0] == 0 ? 1 : 0
current[1] = current[1] == 0 ? 1 : 0
if isSame(current) {
print(result+1)
} else {
print(-1)
}
}
Reference
この問題について([Swift]白駿2138-電球とスイッチ), 我々は、より多くの情報をここで見つけました https://velog.io/@sun02/Swift-백준-2138-전구와-스위치テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol