2022. 10. 31. 10:36ใAlgorithm
๋ฐฑ์ค - ๋ฉํฐํญ ์ค์ผ์ค๋ง(Swift)
๋ฌธ์ ์ค๋ช
https://www.acmicpc.net/problem/1700
๋์ ํ์ด
๋ฌธ์ ์ ํต์ฌ์ ์ฐพ๋๊ฒ ๋ฒ๊ฑฐ์ ๋ ๋ฌธ์ ์ด๋ค.
์ฒ์์๋ ๋จ์ํ ๋ค์ ์๋ ๋ฆฌ์คํธ ์ค์์ ๊ฐ์ฅ ์ ๊ฒ ์ฌ์ฉํ ๊ฒ์ ๋นผ์๊ณ ์๊ฐํ๋๋ฐ
2 3 2 3 1 1 5 5 6 6 10 ... 2 2 2 ์ ๊ฒฝ์ฐ์ ๊ฐ์ฅ ๋์ค์ ๋์ค๋ 2๋ฅผ ๋นผ์ผํ๋๋ฐ ์ ์ฒด์ ์ผ๋ก ๋ดค์๋ 2์ ์๊ฐ ๊ฐ์ฅ ๋ง๊ธฐ ๋๋ฌธ์ ๊ฐ์ฅ ๋ฆ๊ฒ ๋บ์ผ๋ก์จ ์ต์ ์ ๋ฌ์ฑํ์ง ๋ชปํ๋ค.
๊ทธ๋์ ์ด ๋ฌธ์ ๋ ๊ทธ๋ฆฌ๋ํ ์ ๊ทผ์ผ๋ก ๊ฐ์ฅ ๋์ค์ ์ฌ์ฉ๋๋ ๊ฒ์ ๋จผ์ ๋ฝ์์ผ ํ๋ค๋ ์์ด๋์ด๋ฅผ ์๊ฐํด์ผํ๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋ฐ๋ก๊ฐ ์๊ฒ๋๊ณ ๋งค์๊ฐ ์ต์ ์ผ๋ก ๋ต์ ๋๋ฌํ ์ ์๊ฒ ๋๋ค.
Set์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ๋ค๋ฅธ ์ฌ๋์ ํ์ด๋ฅผ ๋ณด๊ณ ๊ต์ฅํ ์ฐธ์ ํ๋ค๊ณ ์๊ฐ์ด ๋ค์๋ค.
๊ธฐ์กด์ ์๋ฆฌ๋ ์ด๋ ๋ค.
๋ฌธ์ ์ ์์๋ก 2๊ฐ์ ์ฝ์ผํธ์ 2 3 2 3 1 2 7์ ์์๋ก ๋ค์ด์จ๋ค๊ณ ํ์๋
์ฒ์์๋ 2 3์ด ์๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ดํ 2์ 3์ด๋์ฌ ๋๋ ๋ฌด์ํ๊ณ ์ง๋๊ฐ๊ณ 2์ 3์ด ์๋๋(์ฌ๊ธฐ์๋ 1์ด ๋ค์ด์์ผํ ๋) 1์ ๋ค์ ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋ฉด์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ฌ์ฉ๋๋ ์ ์๊ธฐ๊ธฐ๋ฅผ ๋นผ์ค๋ค. ๋ง์ฝ ์ดํ ์ฌ์ฉ๋์ง ์๋ ์ ์๊ธฐ๊ธฐ๊ฐ ํ์ฌ ์ฝ์ผํธ์ ๋ฝํ์๋ค๋ฉด ๊ทธ๊ฑธ ๋บด์ค๋ค.
์ด ๊ตฌ์กฐ๋ฅผ ํธํ๊ฒ Set์ผ๋ก ํํํ๋ค.
ํ์ฌ ์ฝ์ผํธ์ ๋ด๊ณ ์๋ ๊ฒ์ Set์ผ๋ก ๋์ ๋ณ์ temp์ผ๋ก ๋ ๋ค ์ธ๋ฑ์ค๋ฅผ ํ์ํ๋๋ฐ temp์์ ๊ฐ์ด ์๋ค๋ฉด temp์์ ๊ทธ ๊ฐ์ ๋ฐ๋ก ์ ๊ฑฐ๋ฅผํ๋ค. ๊ทธ๋ฆฌ๊ณ temp์ count๊ฐ 1์ผ๋ break๋ฅผ ํด์ฃผ๊ณ ๊ทธ ๊ฐ์ ์ฝ์ผํธ์์ ์ง์ด๋ค.
์ด๋ ๊ฒ ํ๋ค๋ฉด ๊ฐ์ฅ ๋ง์ง๋ง์ ์ฌ์ฉ๋๋ ์ ์๊ธฐ๊ธฐ๋ง ๋จ๊ฒจ๋ ์ ์๊ณ , ๋ง์ฝ ๋ง์ง๋ง์ ์ฌ์ฉ๋๋ ์ ์๊ธฐ๊ธฐ๊ฐ ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ temp.first๋ฅผ ํตํด ์๋ฌด๊ฑฐ๋ ์ง์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ผ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง๋ค.
import Foundation
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
let N = input[0], K = input[1]
let usageList = readLine()!.components(separatedBy:" ").map{Int($0)!}
var keep = [Int]()
var cnt = 0
for (i, plug) in usageList.enumerated() {
if keep.contains(plug) {
continue
} else if keep.count < N {
keep.append(plug)
} else {
var temp = Set(keep)
for j in i+1..<K {
if temp.count == 1 { break }
if temp.contains(usageList[j]) {
temp.remove(usageList[j])
}
}
keep.remove(at: keep.firstIndex(of: temp.first!)!)
keep.append(usageList[i])
cnt += 1
}
}
print(cnt)
๋ค๋ฅธ ์ฌ๋์ ํ์ด
import Foundation
let input = readLine()!.components(separatedBy:" ").map{Int($0)!}
let N = input[0], K = input[1]
let usageList = readLine()!.components(separatedBy:" ").map{Int($0)!}
var keep = [Int]()
var cnt = 0
for (i, plug) in usageList.enumerated() {
if keep.contains(plug) { // ์ฝ์ผํธ์ ๊ฝํ์์ผ๋ฉด ๋์ด๊ฐ๊ณ
continue
} else if keep.count < N { // ์ฝ์ผํธ๊ฐ ๊ฝ์ฐจ์ง์์๋ค๋ฉด ์ถ๊ฐ
keep.append(plug)
} else {
var offIndex = -1 // ์ฝ์ผํธ ์ธ๋ฑ์ค
var lastUsed = -1 // ์ฝ์ผํธ์ ๊ฝํ์๋ ๊ฐ๋ค์ ํ์ํ๋ฉด์ ๋ ํฐ ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ธ์ง ์ฐพ๊ธฐ์ํ ๋ณ์
for (plugIndex, p) in keep.enumerated() {
var shouldIndex = -1
for j in i+1..<K {
if p == usageList[j] { //์ฝ์ผํธ์ ๊ฝํ์๋ ๊ฒ ํน์ ์ธ๋ฑ์ค์์ ์ฌ์ฉ์ด ๋์๋ค๋ฉด ์ธ๋ฑ์ค ๋ณด๊ด
shouldIndex = j
break
}
}
if shouldIndex == -1 { // ํ์ฌ ํ์ํ๊ณ ์๋ ์ฝ์ผํธ์ ๊ฝํ ์ซ์๊ฐ ์ดํ์ ์๋ค๋ฉด break
offIndex = plugIndex
break
} else {
if shouldIndex > lastUsed { //์ด์ ์ ๊ฝํ์๋ ์ธ๋ฑ์ค๋ณด๋ค ๋๋ค๋ฉด ๊ฐฑ์ .
lastUsed = shouldIndex
offIndex = plugIndex
}
}
}
keep[offIndex] = plug
cnt += 1
}
}
print(cnt)
ํผ๋๋ฐฑ
์ข ์ด๋ ค์์ ๋ค๋ฅธ์ฌ๋์ ํ์ด๋ฅผ ์ฐพ์๋ณด๊ณ ๋ฌธ์ ๋ฅผ ํ์๋ค.
๋ฌธ์ ์ ํน์ฑ์ ์ฝ์ผํธ๊ฐ ๊ฝ์ฐจ๋ ๊ฒ์ ๋จผ์ if๋ฌธ์ ๋๋ ๊ฒ์ด ์๋ ์ฝ์ผํธ์ ์ด๋ฏธ ๊ฐ์ด ์๋ค๋ฉด continueํ๋ ๋ก์ง์ ๋จผ์ ๋ฃ์ด์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ Set์ ์ด์ฉํด์ ๋จ์ํ ์ํจ ์ ์ด ์ฌ๋ฐ์๋๋ฐ ๋๋ ์ ์ฐํ ์ฌ๊ณ ๋ฅผ ๊ฐ์ง๋ ค๊ณ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ฒ์์ ๋ง๋ ๋์ค์ด (0) | 2022.10.31 |
---|---|
๋ฐฑ์ค - ๋ณ๋ ๋์ดํธ(Swift) (0) | 2022.10.31 |
๋ฐฑ์ค - ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ(Swift) (0) | 2022.10.28 |
๋ฐฑ์ค - ์ธํ์ ์ฌ์ฅ ๋ํ(Swift) (0) | 2022.10.28 |
๋ฐฑ์ค - ๊ฐ์์ค ๋ฐฐ์ (Swift) (0) | 2022.10.28 |