๐ ๋ฌธ์
๐ญ ์๊ฐ์ ํ๋ฆ
1. ๋งจ ์ฒซ๊ธ์๋ก group์ ๋๋์ด 9..0 ์ญ์์ผ๋ก ํ๋๋ค.
2. ๊ฐ ๋ผ์ด๋๋ฅผ ๋๋ฉฐ ์ค๋ณต ์์ด ๊ฐ์ฅ ํฐ์๊ฐ ํ๋ ๋์ฌ๋ ๋ง๋ค ์ด์ด๋ถ์ธ๋ค.
roundArray = [3, 34, 3411, 3434, 3413, 345]
1๋ผ์ด๋ : 3 3 3 3 3 3 3
2๋ผ์ด๋ : 3 4 4 4 4 4
3๋ผ์ด๋ : 3 3 1 3 1 5
4๋ผ์ด๋ : 3 4 1 4 3
...
๐ต๐ซ ์ค์
1. ์ ๋ฐฉ๋ฒ์์ ์ค๋ณต์ด ์์ ๊ฒฝ์ฐ ํด๋น ์ซ์๋ง ํ๋ณด๋ก ๋จ๊ธฐ๊ณ ๋ผ์ด๋๋ฅผ ๋ ๋ฐ๋ก๋๋ ค์ผํ๋ค.
-> ์ฌ๊ท๋ฅผ ์จ์ผํจ.
2. ๋ชจ๋ ์ซ์๊ฐ 0์ด ์ฌ ๊ฒฝ์ฐ ์ถ๋ ฅ์ 0์ด๋ค. ex) [0, 0, 0, 0] -> 0
(โป ๊ฒฐ๊ณผ๋ฅผ string์ผ๋ก ๋ฐํํ ๋ฟ ์ด์จ๋ ๊ฐ์ฅ ํฐ ์ ์ ๋ณํํ์ฌ ์ถ๋ ฅํด์ผํ๋ค.)
๐ ์๋ชป๋ ํ์ด (Kotlin)
package max_number
import java.lang.StringBuilder
import java.util.*
/*
========================================
๊ฐ์ฅ๋จผ์ ํฐ ์๊ฐ ๋์ค๋ ๋์ ์์๋ด๋ฉด ๋๋ค.
๋์ ์ ๊ตฐ์ ๋ฌถ๋๋ค. ๊ฐ์์ ๋ค๋ผ๋ฆฌ์ ๋ฆฌ๊ทธ์ด๋ค.
๋์ ์ ๋ฆฌ๊ทธ๋ ๋ค์ ์ฒซ์๋ฆฌ ๋ถํฐ ์์์. (๋ท์๋ฆฌ ์์ ๊ฒฝ์ฐ)
์์ ํํ: index % it.length (โ
)
=======================================
*/
class Solution {
fun solution(numbers: IntArray): String {
// ๋งจ ์ฒซ์๋ฆฌ๋ฅผ ๊ฐ ๊ตฐ์ผ๋ก ๋๋ (์ฒซ์๋ฆฌ 9 ~ 0) 0์ด๋ฉด ํ ๊ฒ ์์
val stringArray = numbers.map { it.toString() }
val map = stringArray.groupBy { it[0] }
val stringBuilder = StringBuilder()
for (key in map.keys.sorted().reversed()) {
// round ์์
val roundArrayList = map[key]!! as ArrayList<String> // ์ด๋ฏธ ์ฌ๊ธฐ์ ๋ผ์ด๋ ๋ฐฐ์ด์ด ๋ด๊น
var index = 0
while (roundArrayList.isNotEmpty()) {
val positionArrayList = Array<String>(roundArrayList.size){index-> roundArrayList[index % roundArrayList[index].length]}
// ๊ฐ ์๋ฆฌ์๋ ๋ชจ์ธ์ํฉ (positionArrayList ๋ชจ์)
val maxValue = positionArrayList.maxOf { it }
val occurrences = positionArrayList.count(){it == maxValue} // ์ต๋๊ฐ ๊ฐฏ์
// ๋
๋ณด์ ์ผ๋ก ํฐ๋
if (occurrences == 1) {
val targetIndex = positionArrayList.indexOf(maxValue)
stringBuilder.append(roundArrayList[targetIndex])
roundArrayList.removeAt(targetIndex)
}
index++
// ๋ฌธ์ ๋ ๊ฒน์น๊ธฐ๋งํ์ ๋์.. ๋ฌดํ loop ๋๋์ง ์์ 34 vs 3434
// ๋ญ ๋จผ์ ํ๋ ์๊ด ์๊ธดํจ ใ
ใ
}
}
return stringBuilder.toString()
}
}
fun main() {
println(Solution().solution(arrayOf(6, 61, 56, 10, 102, 24, 2).toIntArray()))
}
'์ ๋ ฌ..'?
C๋ฅผ ์ ์ธํ ์ด๋์ธ์ด๋ ๊ธฐ๋ณธ ์๋ฃ๊ตฌ์กฐ์ ๋ํ ์ ๋ ฌ์ ๋ชจ๋ ์ง์ํ๊ณ ์ ๋ ฌ์ ์ฌ์ฉํ compare ํจ์๋ฅผ ์ ์ํ ์ ์๋จ ์ฌ์ค์ ๋ ์ฌ๋ ธ๋ค.
compare (์ฐ์ ์์ ๊ตฌ๋ถ ํจ์)๋ ๋ค์๊ณผ ๊ฐ๋ค.
์ & ๋ค ์ซ์๋ฅผ ์ด์ด๋ถ์ด๊ณ ๋ ํฐ๋์ ๋จผ์ ์ค๊ฒํ๋ค.
๐ ํ์ด (Kotlin)
import java.lang.StringBuilder
class Solution2 {
fun solution(numbers: IntArray): String {
// ๋ชจ๋ ์ซ์ 0์ผ๋ก ๋ค์ด์ค๋ฉด 1๋ฒ 0 ํ๊ณ ๋๋. (0์ ์ฐ์ํ ์๋ ์์ฐ์๊ฐ ์๋)
if (numbers.all { it == 0 }) return "0"
// ์ฒซ ๊ธ์๋ก ๋๋
val map = numbers.map{it.toString()}.groupBy { it[0] }
val stringBuilder = StringBuilder()
for (key in map.keys.sorted().reversed()) {
with(map[key]!!){
sortedWith(Comparator<String> { o1, o2 ->
when {
o1 + o2 < o2 + o1 -> 1
o1 + o2 == o2 + o1 -> 0
else -> -1
}
}).forEach { stringBuilder.append(it) }
}
}
return stringBuilder.toString()
}
}
.... ๊ทธ๋ฅ ๋ฌธ์์ด๊ฐ ๋์๋น๊ต๋ง ํ๋ฉด ๋๋ ใ ๋ฐฅ ๋ฌธ์ ์๋๋ฐ..
ใ ๋ฐฅ์ ๋์๋ค.
์ต์ ํ ์ฝ๋
comapreTo๋ ์, ๋ท๋์ ๋์๋น๊ต๋ฅผ ํ๋๋ฐ
๋ ์์ผ๋ฉด -1, ๊ฐ์ผ๋ฉด 0 , ํฌ๋ฉด 1์ด๋ผ default๋ ์ค๋ฆ์ฐจ์์ด๋ค.
๋ฐ๋ผ์ ๋ด๋ฆผ์ฐจ์์ ์ํด์๋ o1, o2 (์, ๋ท) ๋์ ์์๋ฅผ ๋ฐ๊ฟ์ ์กฐํฉํด์ฃผ๋ฉด ๋๋ค.
o1, o2 -> (o2+o1).compareTo(o1+o2)
'Algorithm > Algorithm (๋ฌธ์ ํ์ด)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[GeeksForGeeks] Topological Sort using Kahn's Algorithm (0) | 2021.02.04 |
---|---|
[GeeksForGeeks] Detect cycle using DFS (0) | 2021.02.02 |
[Programmers] N๊ฐ์ ์ต์๊ณต๋ฐฐ์ (0) | 2021.01.11 |
[Programmers] 124 ๋๋ผ์ ์ซ์ (0) | 2021.01.04 |
[Programmers] ์์ฅ (0) | 2021.01.02 |