- 구름톤 코테1주차 과정의 문제들에 대한 이야기
금요일 문제#
- 솔직히 좀 걸렸습니다. 코틀린으로 코테언어 바꾼지 얼마 안됬다고 변명하기엔.. 그냥 코테실력이 부족했습니다.
- 단순 구현은 좀 빨리 끝났는데, 이게 자꾸 효율성 테스트에서 Fail 이 발생했습니다.
- 요즘 효율성까지 보는 문제들을 잘 안풀어서 그런지 그냥 포기할까? 생각을 했고 실제로 금요일에는 포기했습니다. 근데 거기서 끝나면 이런 글을 못썼겠죠? 그냥.. 시간을 왕창 갈아넣어서 겨우겨우 풀었습니다
- 잡설이 길었는데 코드먼저 보시죠
답은 맞는데 효율성을 통과 못하는 코드#
fun main(args: Array<String>) {
val (count, indexOfAnswer) = readLine()!!.split(" ").map { s -> s.toInt() }
val st = StringTokenizer(BufferedReader(InputStreamReader(System.`in`)).readLine(), " ")
val list: List<Int> = (1..count)
.asSequence()
.map { st.nextToken().toInt() }
.sortedWith(
compareByDescending<Int> { countOf1AtBinary(it) }
.thenByDescending { it }
)
.toList()
print(list[indexOfAnswer - 1])
}
fun countOf1AtBinary(decimalNumber: Int): Int {
return Integer.toBinaryString(decimalNumber)
.toCharArray()
.filter { it -> it == '1' }
.size
}
효율성을 통과하는 코드#
fun main(args: Array<String>) {
val (count, indexOfAnswer) = readLine()!!.split(" ").map { s -> s.toInt() }
val st = StringTokenizer(BufferedReader(InputStreamReader(System.`in`)).readLine(), " ")
val list = mutableListOf<Pair<Int, Int>>()
for (i in 1..count) {
val num = st.nextToken().toInt()
list.add(Pair(num, countOf1AtBinary(num)))
}
list.sortWith(
compareByDescending<Pair<Int, Int>> { it.second }
.thenByDescending { it.first }
)
print(list[indexOfAnswer - 1].first)
}
fun countOf1AtBinary(decimalNumber: Int): Int {
return Integer.toBinaryString(decimalNumber)
.toCharArray()
.filter { it -> it == '1' }
.size
}
효율성에서 실패하는 원인#
//효율성 통과
val list = mutableListOf<Pair<Int, Int>>()
for (i in 1..count) {
val num = st.nextToken().toInt()
list.add(Pair(num, countOf1AtBinary(num)))
}
list.sortWith(
compareByDescending<Pair<Int, Int>> { it.second }
.thenByDescending { it.first }
)
//효율성 실패
val list: List<Int> = (1..count)
.asSequence()
.map { st.nextToken().toInt() }
.sortedWith(
compareByDescending<Int> { countOf1AtBinary(it) }
.thenByDescending { it }
)
.toList()
요구조건#
[문제]
- N개의 10진수 정수가 주어진다. 플레이어에게 정수를 그냥 정렬하는 것은 너무 쉽기 때문에, 아래 기준에 따라 정수를
정렬하기로 한다.
- 10진수 정수를 2진수로 나타냈을 때, 2진수에 포함된 1의 개수를 기준으로 내림차순 정렬한다.
- 1의 개수가 같다면, 원래 10진수를 기준으로 내림차순 정렬한다.
플레이어가 정수를 잘 정렬했을 때, 앞에서 번째에 위치한 수는 어떤 수가 될지 구해보자.
[입력]
첫째 줄에 주어지는 정수와 플레이어가 찾으려는 정수의 위치 가 공백을 두고 주어진다
구름톤 컨테이너 주소#