๊ธ€ ์ž‘์„ฑ์ž: ์ด์ง€์›๐ŸŒฉ๏ธ
  1. ๊ฐ™์€ ์ˆ˜๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด visited๋กœ ์ฒดํฌ
  2. ์ค‘๋ณต ์ˆœ์—ด์„ ๊ฑฐ๋ฅด๊ธฐ ์œ„ํ•ด Set ํƒ€์ž…์œผ๋กœ ์ €์žฅ
  3. ์ค‘์š”: 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
    }
}
๋ฐ˜์‘ํ˜•