코틀린/코딩테스트

코딩테스트 [x만큼 간격이 있는 n개의 숫자]

정혜현 2024. 7. 1. 10:06

문제

함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

 

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/12954


 

풀이

1. 접근

1.1 관찰

n개의 x배수를 Long배열로 담는 문제

입력 : 정수

출력 : 배열(Long)

 

1.2 계획 

범위 : 1부터 n

반복하기 : 반복횟수에 x를 곱하기

반환하기 : Long타입으로 변환해서 담기

 

 

 

 

2. 시행착오

2.1 시도

 

class Solution {
    fun solution(x: Int, n: Int): LongArray {
        var answer = longArrayOf()
        for(i in 1..n) {
            answer += (x * i).toLong()
        }
        return answer
    }
}

 

검증결과 : 성공

 

for문이 나오면 filter를 생각해보게 되는데 for문 + if문일 경우에는 적합하지만 오늘처럼 단순히 반복해서 담아야되는 경우엔 적합하지 않다. 반복문만 쓰는 패턴을 깨고 싶은 이유도 있고 간결하게 작성할 수 있다는 점 때문에 바꿔보려는건데 정확히는 filter보다 람다식의 영향이 컸다. 다른 풀이를 보고 람다식 사용방법을 익혀봤다. 

 

class Solution {
    fun solution(x: Int, n: Int): LongArray {
        val answer = LongArray(n) {it -> (it + 1) * x.toLong()}
        return answer
    }
}

 

여기서 의문.

it에 +1을 하지 않으면 결과값이 0부터 시작한다. 즉 it은 인덱스 번호를 가리키고 있다. it은 요소를 가리키는 임시변수로 알고 있었는데 요소의 인덱스를 가리키고 있다. 어떻게? 

 

 

 

 

 

생략가능한 부분을 수정하자.

1. 한줄짜리 표현식이므로 괄호와 리턴 생략

2. 타입추론 가능하므로 타입 생략

3. 인자 임시변수 하나뿐이므로 it생략 

class Solution {
    fun solution(x: Int, n: Int) = LongArray(n) {(it + 1) * x.toLong()}
}

 

 

 


회고