Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Algorithm/Baekjoon

[๋ฐฑ์ค€] (Swift) 15651๋ฒˆ - N๊ณผ M(3) (๋‘๋ฒˆ์งธ ํ’€์ด) (feat. DFS, ๋ฐฑํŠธ๋ž˜ํ‚น)

๊ฐ์ž ๐Ÿฅ” 2023. 1. 12. 10:58
๋ฐ˜์‘ํ˜•

๐ŸŸ  ๋ฌธ์ œ

https://www.acmicpc.net/problem/15651

 

15651๋ฒˆ: N๊ณผ M (3)

ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ๋ฌธ์ œ์˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ˆ˜์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค. ์ค‘๋ณต๋˜๋Š” ์ˆ˜์—ด์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ถœ๋ ฅํ•˜๋ฉด ์•ˆ๋˜๋ฉฐ, ๊ฐ ์ˆ˜์—ด์€ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์„œ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ˆ˜์—ด์€ ์‚ฌ์ „ ์ˆœ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์„œ๋กœ ์ถœ๋ ฅํ•ด

www.acmicpc.net

 

๐ŸŸ  ๋‚˜์˜ ํ’€์ด

์ด์ „์— N๊ณผM(1), (2)๋ฒˆ ๋ฌธ์ œ์™€ ๊ธฐ๋ณธ์ ์ธ ํ’€์ด ๋ฐฉ์‹์€ ๊ฐ™๋‹ค. (N๊ณผM(1) ํ’€์ด, N๊ณผ M(2)ํ’€์ด) ์ž์„ธํ•œ DFS, ๋ฐฑํŠธ๋ž˜ํ‚น์˜ ๊ณผ์ •์„ ๋ณด๋ ค๋ฉด (1)๋ฒˆ ํ’€์ด๋ฅผ ๋ณด๋ฉด ๋œ๋‹ค.

1๋ฒˆ๊ณผ ๋‹ค๋ฅธ์ ์€ ๋ฐ”๋กœ, ์ค‘๋ณต๋œ ๊ฐ’๋“ค๋„ ํ—ˆ์šฉํ•ด์„œ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด ์˜๋ฏธ๋Š” ์ฆ‰, '๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ'๋ฅผ ํ•˜์ง€ ์•Š๋Š” ๋‹ค๋Š” ๋œป์œผ๋กœ ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ์ˆ˜๋“ค์„ ์ˆœํšŒํ•˜๋ฉด์„œ ์ถœ๋ ฅํ•œ๋‹ค๋Š” ๋œป! ๊ทธ๋ž˜์„œ ๋‚ด๊ฐ€ ํ‘ผ ํ’€์ด์—์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ์˜ ์—ญํ• ์„ ํ–ˆ๋˜ if contain ๋ถ€๋ถ„์„ ์‚ญ์ œํ•ด์ฃผ์—ˆ๋‹ค.

โŒ ์‹œ๊ฐ„์ดˆ๊ณผ

์•„๋‹ˆ ์™œ ์‹œ๊ฐ„์ดˆ๊ณผ์•ผ? ์ €์–ด์—‰๋ง ์ด๋ก ์ƒ ์™„๋ฒฝํ•œ ํ’€์ด์ด๊ธฐ๋„ ํ–ˆ๊ณ , ๋„ˆ๋ฌด ๋‹น์—ฐํ•˜๊ฒŒ ์‹œ๊ฐ„์ดˆ๊ณผ๋„ ๋‚˜์ง€ ์•Š์„๋งŒํ•œ ํ’€์ด์˜€๋‹ค. ์‹œ๊ฐ„๋ณต์žก๋„๋„ ๋˜‘๊ฐ™์€๋ฐ ์™œ..? ๋„๋Œ€์ฒด๊ฐ€ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š์•˜๊ณ , ๋‹ค๋ฅธ ํ’€์ด๋กœ ๋„์ „ํ•˜๋ ค๊ณ  ํ•ด๋„ ๊ฐ™์€ ์‹œ๊ฐ„๋ณต์žก๋„์˜€์–ด์„œ ๊ตณ์ด ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ƒ๊ฐํ• ๊ฒŒ ์•„๋‹ˆ์—ˆ๋‹ค.

์ธํ„ฐ๋„ท์„ ์กฐ๊ธˆ ์ฐพ์•„๋ณด๋‹ˆ..ใ…‹ใ…‹ใ…‹ใ…‹ print๋ฅผ ๋งค๋ฒˆ ํ•ด์ฃผ๋Š”๊ฒŒ ์‹œ๊ฐ„์ดˆ๊ณผ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ String type์˜ answer ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋‘๊ณ , ์ด ๋ณ€์ˆ˜์— ์ฐจ๊ณก์ฐจ๊ณก ๋”ํ•ด์ค€ ๋‹ค์Œ, ๋”ฑ ํ•œ๋ฒˆ์˜ print๋งŒ ํ•ด์ฃผ์—ˆ๋‹ค. ๊ทธ๋žฌ๋”๋‹ˆ ํ†ต๊ณผ... ๋ฐ”๋ณด

 

๐ŸŸ  ์ •๋‹ต์ฝ”๋“œ

// โŒ ์‹œ๊ฐ„์ดˆ๊ณผ -> โœ… ํ†ต๊ณผ (print๋ฅผ ๋งค๋ฒˆ ํ•ด์ฃผ๋Š” ๋ฐฉ์‹ no, ํ•œ๋ฒˆ์˜ ์ถœ๋ ฅ์œผ๋กœ ํ•ด๊ฒฐ)
// ์ด ๋ฐฉ๋ฒ• ์™„์ „ ๋งž๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ์™œ ์‹œ๊ฐ„์ดˆ๊ณผ?
let NM = readLine()!.split(separator: " ").map{ Int($0)! }
let N = NM[0]
let M = NM[1]

var stack = [Int]()
var answer = ""

private func dfs() {
    if stack.count == M {
        answer += stack.map{ String($0) }.joined(separator: " ")
        answer += "\n"
        return
    }

    for i in 1...N {
        stack.append(i)
        dfs()
        stack.removeLast()
    }
}

dfs()
print(answer)
๋ฐ˜์‘ํ˜•