n 횟수만큼 my_string의 문자 h, e, l, l, o 를 반복한 string을 만들어서 리스트를 반환한다. 그리고 리스트의 각 문자열을 joinToString("") 을 통해 하나의 문자열로 합쳐서 String 을 반환한다. - map , repeat(int) , joinToString(seperator)
2. 삼각형 완성조건(1) let { (x,y,z) 로 표현 가능
fun solution(sides: IntArray): Int = sides.sorted().let { (x, y, z) ->
if(x+y>z) 1 else 2
}
sorted > 가장 긴 변을 찾고 ex ) 3, 6, 2 -> 2, 3, 6 let { (x, y, z) -> } 정렬된 리스트 it을 x,y,z 로 표현하여 가장 긴 변이 z 나머지 두변 x,y if 문 true 1 false 2 - let { (x,y,z) 로 표현 가능
3. 자릿수 더하기
처음 풀이
class Solution {
fun solution(n: Int): Int {
var answer: Int = 0
var num = n
while(num>0) {
answer += num%10
num /= 10
}
return answer
}
}
for문으로 Int를 10으로 나누어서 더해가는 식으로 하였다. 이렇게 하면 while 한번으로 n의 시간복잡도와 대략 0.01m 의 성능을 보여주는데 아래의 다른 방식으로도 풀 수 있다.
class Solution {
fun solution(n: Int): Int = n.toString().toList().sumOf { it.digitToInt() }
}
위와 같이 입력값 n을 string으로 변경하고 list로 바꾼 후에 각 char의 digitToInt로 더해서도 구할 수 있다. 코드는 간결하고 짧지만
시간이 0.01에서 케이스에따라 늘어남을 알 수 있다. 성능은 while을 사용해서 하는게 더 좋다.
4. 세균 증식
class Solution {
fun solution(n: Int, t: Int): Int {
var answer: Int = 1*n
for(i in 1..t) {
answer *= 2
}
return answer
}
}
class Solution {
fun solution(n: Int, t: Int): Int = n shl t
}
shift 연산자를 몰랐다 생각을 안했다. 아직 틀에 박혔다. 비트연산자를 잘 활용해야겠다. 두배만큼 증식한다 = 2를 계속 곱한다. = 2의 t승을 곱한다. -> shr 연산자 - 왼쪽으로 비트 열 이동 << n shl num - 오른쪽으로 비트 열 이동 >> n shr num
7 = 0000 0111 > 7 shl 2 = 0001 1100 = 28
7*1 7*2 7*2*2 7*2*2*2
2 = 0000 0010 > 2 shl 10 = 1000 0000 0000 = 2048
5. 외계행성의 나이 - 아스키코드
class Solution {
fun solution(age: Int): String = age.toList().map {
(it.digitToInt()+97).toChar()
}.joinToString("")
}
아스키코드 변환을 이용하여 결과를 구하면 된다. 중요한건 아스키코드 값을 알고있냐 없냐. a = 65 , A = 97, 0 = 48 암기하자.
6. 최댓값 만들기 (2) - max(a: , b: ) 이용
쉬운거지만 Kotlin 에 max() 함수를 이용하면 더욱 간편하게 구할 수 있었다. max() 함수를 몰라서 두개를 구해가지고 했는데 주어진 intArrayOf 를 sorted() 하고 그중에 맨앞에 두개와 맨뒤에 두개를 곱한 값을 max(a,b) 에 넣으면 둘중에 더 큰값을 반환한다.
5. 중복된 문자 제거 - toSet() 이용
6. 팩토리얼 - 재귀함수 이용
fun factorial(n: Int): Int = if(n==1) 1 else n*factorial(n-1)
7. 2차원으로 만들기 - chunked(n)
class Solution {
fun solution(num_list: IntArray, n: Int) = num_list.toList().chunked(n)
}