2022. 11. 10. 14:30ใAlgorithm
๋ฐฑ์ค - ์ค์์น ์ผ๊ณ ๋๊ธฐ(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/1244
๋์ ํ์ด
์ค์์น์ ๊ฐ์์ ํ์์ ์๊ฐ 100์ดํ ์ด๋ฏ๋ก ์์ ํ์์ ํ ์ ์๊ณ ์ด๋ก์ธํด ๊ตฌํ๋ฌธ์ ์ธ ๊ฒ์ ์ ์ ์๋ค.
๋ชจ๋ ๊ตฌํ๋ฌธ์ ๊ฐ ๊ทธ๋ ๋ฏ์ด ํญ์ ํ ๋ฌธ์ฅ์ ์ ๋๋ก ์ฝ์ง ์์์ ํ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋์ ๊ฒฝ์ฐ์๋ ๊ตฌ๊ฐ์ ์ํ ์ค์์น์ ๊ฐ์๋ ํ์๋ผ๋ ๋ฌธ์ฅ์ ๊ฐ๊ณผํ์๋๋ฐ, ์ฌ์๊ฐ 3์ ๋ฝ์๋ค๋ฉด 3 ๋ํ ๋ค์ง์ด์ค์ผํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ณ ๋ คํ์ด์ผ ํ๋ค.
import Foundation
let n = Int(readLine()!)!
var states = readLine()!.components(separatedBy:" ").map{Int($0)!} // ์ค์์น ์ํ
let total = states.count
states.insert(0, at: 0) // 1๋ฒ ์ธ๋ฑ์ค๋ถํฐ ํธํ๊ฒ ํ๊ธฐ์ํด ์ฝ์
let num = Int(readLine()!)! // ํ์ ์
for _ in 0..<num {
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
let type = input[0], card = input[1] // ์ฑ๋ณ, ๋ฐ์ ์ซ์
var ran = 1
switch type {
case 1: // ๋จ์์ผ ๋
let share = total / card // ๋ฐฐ์๊ฐ ๋๋ ๊ฐ์
for i in 1..<share+1 {
let idx = card*i
toggle(idx)
}
case 2: // ์ฌ์์ผ ๋
while true {
if check(card, ran) { // ๋ฒ์์ ๊ฐ๋ค์ด ๊ฐ๋ค๋ฉด toggleํ ๋ ๊น๊ฒ ํ์
toggle(card-ran)
toggle(card+ran)
} else {
toggle(card)
break
}
ran += 1
}
default:
break
}
}
states.removeFirst() // ์ฒ์ ์ฝ์
ํ ๊ฒ์ ์ง์ด๋ค.
if states.count < 21 {
print(states.map{String($0)}.joined(separator:" "))
} else {
let p = total / 20
let rest = total % 20
var idx = -20
for _ in 0..<p {
idx += 20
for j in 0..<20 {
print(states[idx+j], terminator: " ")
}
print()
}
if rest != 0 {
idx += 20
for j in 0..<rest {
print(states[idx+j], terminator: " ")
}
}
}
// states[idx]์ ์ํ๋ฅผ ๋ฐ๊ฟ์ค๋ค.
func toggle(_ idx: Int) {
if states[idx] == 0 {
states[idx] = 1
} else {
states[idx] = 0
}
}
// ์ฌ์์ผ ๋ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ํ์ธํด์ ๊ฐ๋ฅํ๋ฉด true ์๋๋ฉด false
func check(_ idx: Int, _ range: Int) -> Bool {
if idx-range < 1 || idx+range > total { // ์ธ๋ฑ์ค์ ๋ฒ์๊ฐ ๋์ด๊ฐ๋ฉด false
return false
}
return states[idx-range] == states[idx+range] ? true : false
}
๋ค๋ฅธ ์ฌ๋์ ํ์ด
20๊ฐ์ฉ ๋์ด์ผ ํ๋ ๋ถ๋ถ์ ๋ชซ๊ณผ ๋๋จธ์ง๋ฅผ ๊ตฌํด์ ์ฒ๋ฆฌํ์๋๋ฐ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๋ ๋์ฑ ๊ฐํธํ ๋ฐฉ๋ฒ์ด ์์๋ค.
์ธ๋ฑ์ค๊ฐ 20๋ฒ์งธ์ผ๋๋ ์ถ๋ ฅํ๊ณ ์ค๋๊น๋ง ํ๋ฉด 20๋ณด๋ค ์์๋๋ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
for (i, x) in states.enumerated() {
if (i+1) % 20 == 0 {
print(x, terminator: "\n")
} else { print(x, terminator: " ")}
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค - ๋ญํน์ ๋๊ธฐ์ด(Swift) (1) | 2022.11.11 |
---|---|
๋ฐฑ์ค - NBA๋๊ตฌ(Swift) (0) | 2022.11.10 |
๋ฐฑ์ค - ๊ธฐ์์บ์คํฐ(Swift) (0) | 2022.11.10 |
๋ฐฑ์ค - ๋ฑ์๊ตฌํ๊ธฐ(Swift) (0) | 2022.11.09 |
๋ฐฑ์ค - ํฌ๋ก์ค์ปจํธ๋ฆฌ(Swift) (0) | 2022.11.09 |