15663๋ฒ: N๊ณผ M (9)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
๋ฐฑ์ค์ N๊ณผ M ๋ฌธ์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ์๋ฆฌ์ฆ์์.
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ์ ์๋ชป ์ ๊ทผํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์ฌ๋ฏธ์๋ ์ฌ์ค์ ๋ฐ๊ฒฌํด์ ํฌ์คํ ํ๊ฒ ๋์์ต๋๋ค.
๋ฌธ์ ์ค๋ช
๋ฌธ์
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 8)
๋์งธ ์ค์ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ฐฑํธ๋ํน ๋ฌธ์ ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๋ DFS๋ก๋ง ํ์์ด์ ใ ใ
๊ทธ๋์ ์๊ฐ์ด 1212ms๊ฐ ๋์์ต๋๋ค.
์ฐธ๊ณ ๋ก 1ํ์ด์ง๋ ๋๋ถ๋ถ 200ms์์ต๋๋ค.

์๋์ค๋ฌ์ด ์ฑ์ ์ด์ฃ ?
์ด ๋ฌธ์ ์ ์์ ์ ๊ฐ์ ์๊ฐ ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง ์ ์๋ค๋ ์ ์ ๋๋ค.
์์ ์ ์ถ๋ ฅ 2๋ฒ์ ๋ณด์๋ฉด ์ ์ ์์ด์.
ํ์ง๋ง ๊ฐ์ ์กฐํฉ์ด ์ฌ๋ฌ ๋ฒ ๋์ค๋ฉด ์ ๋ฉ๋๋ค. ์ฆ, ์ค๋ณต์ธ ์กฐํฉ์ ๋ฌด์ํด์ผ ํฉ๋๋ค.
๊ทธ๋์ ์ค๋ณต ๋ฌด์... Set์ ์ฐ๋ฉด ๋์ง ์์๊น?
๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ํ๊ฒ ๋ค์๊ณผ ๊ฐ์ DFS ์ฝ๋๋ฅผ ์คํํ์ ๋ Set์ด ์ ๋๋ก ์ถ๋ ฅ๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์์ด์.
fun dfs(len: Int, combination: IntArray) {
if (len == M) {
answerSet.add(combination)
return
}
for (i in arr.indices) {
if (visited[i]) continue
combination[len] = arr[i]
visited[i] = true
dfs(len + 1, combination)
visited[i] = false
}
}
๋ง์ง๋ง์ ๋ฃ์ IntArray๋ง ๋ก ํ๋ ์ถ๋ ฅํ๊ณ ์ข ๋ฃ๋์์ต๋๋ค.
IntArray๋ฅผ ์ ๋๋ก ์ ์ฅํ์ง ๋ชปํ๊ณ ์๋ ๊ฒ์ด์ฃ .
์ฅ ๋์ฒด ์?
์ด์ ํ๋ก๊ทธ๋๋จธ์ค - ํ๋ณดํค ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ฉด์ ๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ์ ๋ํด ์งง๊ฒ ์ง๊ณ ๋์ด๊ฐ๋ ์ ์ด ์์๋๋ฐ์.
ํ๋ก๊ทธ๋๋จธ์ค - Lv2. ํ๋ณดํค Kotlin
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ํ๋ก๊ทธ
dev-sia.tistory.com
์ฝํ๋ฆฐ์ด ์ ๋ถ ๋ค ํด์ฃผ๋ ์ค ์๊ณ ๋ฐฉ์ฌํ๋ ์ ์ ์ค์์ ๋๋ค.
์ ์ธํ์ผ๋ก ์ฝ๋ฉํ ๋๋ ์ด๋๊น์ง ๊ตฌํ๋์ด ์๋์ง ์ ์์์ผ ํ๋ ๊ฒ ๊ฐ์์.
List<String>์ == ์ฐ์ฐ์๋ก ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํด ์ฃผ์ง๋ง, IntArray์ ==๋ ๋๋ฑ์ฑ ๊ฒ์ฌ๊ฐ ์๋๋ผ ๋์ผ์ฑ ๊ฒ์ฌ๋ฅผ ํด ์ฃผ๋ค์.
๋ค๋ฅธ primitive type array๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๊ทธ๋์ ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ํจ์๊ฐ ๋ฐ๋ก ์์ต๋๋ค. contentEquals()์ ๋๋ค.
๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ์ด ๊ณ์ ๊ฑธ๋ฆฌ์ ๊ฑฐ๋ฆฌ๋ค์.
๋ค์์ kotlin ์นดํ ๊ณ ๋ฆฌ์ ์ข ํฉํด์ ํฌ์คํ ํ๊ฒ ์ต๋๋ค.
+ ํ์ต๋๋ค.
Kotlin์ Equality, == vs ===
Equality | Kotlin kotlinlang.org ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด kotlin์๋ ๋ ๊ฐ์ง ํ์ ์ Equality๊ฐ ์กด์ฌํฉ๋๋ค. Structural equality์ Referential equality์ธ๋ฐ์. ๊ฐ๋จํ ๋งํ์๋ฉด Structural equality๋ ๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ด๊ณ , Ref
dev-sia.tistory.com
๊ทธ๋์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋?
์ต๋ N์ด 8์ด๊ธฐ ๋๋ฌธ์ ๊นก DFS๋ก๋ ํ๋ฆฌ๊ธด ํ๋๋ผ๊ณ ์.
๋์ค์ ๋ฆฌํฉํ ๋ง์ ํด์ผ๊ฒ ์ง๋ง...
์ ๋ต
fun main() = with(System.`in`.bufferedReader()) {
var (N, M) = readLine().split(" ").map { it.toInt() }
var arr = readLine().split(" ").map { it.toInt() }.toIntArray()
arr.sort()
var visited = BooleanArray(arr.size)
var answerSet = mutableSetOf<List<Int>>()
fun dfs(len: Int, combination: IntArray) {
if (len == M) {
answerSet.add(combination.toList())
return
}
for (i in arr.indices) {
if (visited[i]) continue
combination[len] = arr[i]
visited[i] = true
dfs(len + 1, combination)
visited[i] = false
}
}
dfs(0, IntArray(M))
answerSet.forEach {
println(it.joinToString(" "))
}
}
'๐ ๊ณต๋ถ > ๐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ Kotlin ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค ๊ผฌ์ธ ์ ๊น์ค - boj1365 (0) | 2023.07.27 |
---|---|
๋ฐฑ์ค ํํ์ - boj2932 (0) | 2023.07.11 |
ํ๋ก๊ทธ๋๋จธ์ค - Lv2. ํ๋ณดํค Kotlin (0) | 2023.04.08 |
์ฒซ ๊ธ (0) | 2023.04.07 |
15663๋ฒ: N๊ณผ M (9)
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค. ์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด
www.acmicpc.net
๋ฐฑ์ค์ N๊ณผ M ๋ฌธ์ ์ ๋๋ค.
์ด ๋ฌธ์ ๋ ์๋ฆฌ์ฆ์์.
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ์ ์๋ชป ์ ๊ทผํ๋๋ฐ ๊ทธ ๊ณผ์ ์์ ์ฌ๋ฏธ์๋ ์ฌ์ค์ ๋ฐ๊ฒฌํด์ ํฌ์คํ ํ๊ฒ ๋์์ต๋๋ค.
๋ฌธ์ ์ค๋ช
๋ฌธ์
N๊ฐ์ ์์ฐ์์ ์์ฐ์ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- N๊ฐ์ ์์ฐ์ ์ค์์ M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
์ ๋ ฅ
์ฒซ์งธ ์ค์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 8)
๋์งธ ์ค์ N๊ฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ์๋ 10,000๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค.
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๋ฌธ์ ํ์ด ๋ฐฉ๋ฒ
์์ฃผ ๊ธฐ๋ณธ์ ์ธ ๋ฐฑํธ๋ํน ๋ฌธ์ ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ ๋ DFS๋ก๋ง ํ์์ด์ ใ ใ
๊ทธ๋์ ์๊ฐ์ด 1212ms๊ฐ ๋์์ต๋๋ค.
์ฐธ๊ณ ๋ก 1ํ์ด์ง๋ ๋๋ถ๋ถ 200ms์์ต๋๋ค.

์๋์ค๋ฌ์ด ์ฑ์ ์ด์ฃ ?
์ด ๋ฌธ์ ์ ์์ ์ ๊ฐ์ ์๊ฐ ์ฌ๋ฌ ๋ฒ ์ฃผ์ด์ง ์ ์๋ค๋ ์ ์ ๋๋ค.
์์ ์ ์ถ๋ ฅ 2๋ฒ์ ๋ณด์๋ฉด ์ ์ ์์ด์.
ํ์ง๋ง ๊ฐ์ ์กฐํฉ์ด ์ฌ๋ฌ ๋ฒ ๋์ค๋ฉด ์ ๋ฉ๋๋ค. ์ฆ, ์ค๋ณต์ธ ์กฐํฉ์ ๋ฌด์ํด์ผ ํฉ๋๋ค.
๊ทธ๋์ ์ค๋ณต ๋ฌด์... Set์ ์ฐ๋ฉด ๋์ง ์์๊น?
๋ผ๊ณ ์๊ฐํ์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ด์ํ๊ฒ ๋ค์๊ณผ ๊ฐ์ DFS ์ฝ๋๋ฅผ ์คํํ์ ๋ Set์ด ์ ๋๋ก ์ถ๋ ฅ๋์ง ์๋ ๋ฌธ์ ๊ฐ ์์์ด์.
fun dfs(len: Int, combination: IntArray) {
if (len == M) {
answerSet.add(combination)
return
}
for (i in arr.indices) {
if (visited[i]) continue
combination[len] = arr[i]
visited[i] = true
dfs(len + 1, combination)
visited[i] = false
}
}
๋ง์ง๋ง์ ๋ฃ์ IntArray๋ง ๋ก ํ๋ ์ถ๋ ฅํ๊ณ ์ข ๋ฃ๋์์ต๋๋ค.
IntArray๋ฅผ ์ ๋๋ก ์ ์ฅํ์ง ๋ชปํ๊ณ ์๋ ๊ฒ์ด์ฃ .
์ฅ ๋์ฒด ์?
์ด์ ํ๋ก๊ทธ๋๋จธ์ค - ํ๋ณดํค ๋ฌธ์ ๋ฅผ ์ค๋ช ํ๋ฉด์ ๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ์ ๋ํด ์งง๊ฒ ์ง๊ณ ๋์ด๊ฐ๋ ์ ์ด ์์๋๋ฐ์.
ํ๋ก๊ทธ๋๋จธ์ค - Lv2. ํ๋ณดํค Kotlin
ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์. programmers.co.kr ํ๋ก๊ทธ
dev-sia.tistory.com
์ฝํ๋ฆฐ์ด ์ ๋ถ ๋ค ํด์ฃผ๋ ์ค ์๊ณ ๋ฐฉ์ฌํ๋ ์ ์ ์ค์์ ๋๋ค.
์ ์ธํ์ผ๋ก ์ฝ๋ฉํ ๋๋ ์ด๋๊น์ง ๊ตฌํ๋์ด ์๋์ง ์ ์์์ผ ํ๋ ๊ฒ ๊ฐ์์.
List<String>์ == ์ฐ์ฐ์๋ก ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํด ์ฃผ์ง๋ง, IntArray์ ==๋ ๋๋ฑ์ฑ ๊ฒ์ฌ๊ฐ ์๋๋ผ ๋์ผ์ฑ ๊ฒ์ฌ๋ฅผ ํด ์ฃผ๋ค์.
๋ค๋ฅธ primitive type array๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
๊ทธ๋์ ๋๋ฑ์ฑ ๊ฒ์ฌ๋ฅผ ํ๋ ํจ์๊ฐ ๋ฐ๋ก ์์ต๋๋ค. contentEquals()์ ๋๋ค.
๋์ผ์ฑ๊ณผ ๋๋ฑ์ฑ์ด ๊ณ์ ๊ฑธ๋ฆฌ์ ๊ฑฐ๋ฆฌ๋ค์.
๋ค์์ kotlin ์นดํ ๊ณ ๋ฆฌ์ ์ข ํฉํด์ ํฌ์คํ ํ๊ฒ ์ต๋๋ค.
+ ํ์ต๋๋ค.
Kotlin์ Equality, == vs ===
Equality | Kotlin kotlinlang.org ๊ณต์๋ฌธ์์ ๋ฐ๋ฅด๋ฉด kotlin์๋ ๋ ๊ฐ์ง ํ์ ์ Equality๊ฐ ์กด์ฌํฉ๋๋ค. Structural equality์ Referential equality์ธ๋ฐ์. ๊ฐ๋จํ ๋งํ์๋ฉด Structural equality๋ ๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ด๊ณ , Ref
dev-sia.tistory.com
๊ทธ๋์ ๊ฒฐ๊ณผ์ ์ผ๋ก๋?
์ต๋ N์ด 8์ด๊ธฐ ๋๋ฌธ์ ๊นก DFS๋ก๋ ํ๋ฆฌ๊ธด ํ๋๋ผ๊ณ ์.
๋์ค์ ๋ฆฌํฉํ ๋ง์ ํด์ผ๊ฒ ์ง๋ง...
์ ๋ต
fun main() = with(System.`in`.bufferedReader()) {
var (N, M) = readLine().split(" ").map { it.toInt() }
var arr = readLine().split(" ").map { it.toInt() }.toIntArray()
arr.sort()
var visited = BooleanArray(arr.size)
var answerSet = mutableSetOf<List<Int>>()
fun dfs(len: Int, combination: IntArray) {
if (len == M) {
answerSet.add(combination.toList())
return
}
for (i in arr.indices) {
if (visited[i]) continue
combination[len] = arr[i]
visited[i] = true
dfs(len + 1, combination)
visited[i] = false
}
}
dfs(0, IntArray(M))
answerSet.forEach {
println(it.joinToString(" "))
}
}
'๐ ๊ณต๋ถ > ๐ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ Kotlin ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค ๊ผฌ์ธ ์ ๊น์ค - boj1365 (0) | 2023.07.27 |
---|---|
๋ฐฑ์ค ํํ์ - boj2932 (0) | 2023.07.11 |
ํ๋ก๊ทธ๋๋จธ์ค - Lv2. ํ๋ณดํค Kotlin (0) | 2023.04.08 |
์ฒซ ๊ธ (0) | 2023.04.07 |