- ๊ฐ์ ์๋ฅผ ๋ฐ๋ณตํด์ ๋ฐฉ๋ฌธํ์ง ์๊ธฐ ์ํด
visited
๋ก ์ฒดํฌ - ์ค๋ณต ์์ด์ ๊ฑฐ๋ฅด๊ธฐ ์ํด
Set
ํ์ ์ผ๋ก ์ ์ฅ ์ค์
: String ๋ฐฐ์ด ์ ๋ ฌ์ ์๊ฐ ์ฆ๊ฐํ๋ ์์๊ฐ ์๋! ๋ฐ๋ผ์ ์๊ฐ ์ฆ๊ฐํ๋ ์์๋ก ์ ๋ ฌํ ์ ์๊ฒ ๋ณ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํจlet sortedResult = result.sorted(by: { $0.localizedStandardCompare($1) == .orderedAscending})
๋ฌธ์
https://www.acmicpc.net/problem/15663
๋ด๊ฐ ์์ฑํ ์ฝ๋
Swift
import Foundation
var fileio = FileIO()
let n = fileio.readInt()
let m = fileio.readInt()
var nums = [Int]()
for _ in 0..<n {
let num = fileio.readInt()
nums.append(num)
}
var result = Set<String>()
var picked = [Int]()
var visited = Array(repeating: false, count: n)
func pick(toPick: Int) {
if toPick == 0 {
result.insert(picked.map { String($0) }.joined(separator: " "))
return
}
for i in 0..<n {
if visited[i] {
continue
}
visited[i] = true
picked.append(nums[i])
pick(toPick: toPick - 1)
picked.removeLast()
visited[i] = false
}
}
pick(toPick: m)
let sortedResult = result.sorted(by: { $0.localizedStandardCompare($1) == .orderedAscending})
for num in sortedResult {
print(num)
}
final class FileIO {
private var buffer:[UInt8]
private var index: Int
init(fileHandle: FileHandle = FileHandle.standardInput) {
buffer = Array(fileHandle.readDataToEndOfFile())+[UInt8(0)] // ์ธ๋ฑ์ค ๋ฒ์ ๋์ด๊ฐ๋ ๊ฒ ๋ฐฉ์ง
index = 0
}
@inline(__always) private func read() -> UInt8 {
defer { index += 1 }
return buffer.withUnsafeBufferPointer { $0[index] }
}
@inline(__always) func readInt() -> Int {
var sum = 0
var now = read()
var isPositive = true
while now == 10 || now == 32 { now = read() } // ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์
if now == 45{ isPositive.toggle(); now = read() } // ์์ ์ฒ๋ฆฌ
while now >= 48, now <= 57 {
sum = sum * 10 + Int(now-48)
now = read()
}
return sum * (isPositive ? 1:-1)
}
@inline(__always) func readString() -> String {
var str = ""
var now = read()
while now == 10 || now == 32 { now = read() } // ๊ณต๋ฐฑ๊ณผ ์ค๋ฐ๊ฟ ๋ฌด์
while now != 10 && now != 32 && now != 0 {
str += String(bytes: [now], encoding: .ascii)!
now = read()
}
return str
}
}