728x90

[문제 설명]

정수 n과 k가 주어졌을 때, 1 이상 n이하의 정수 중에서 k의 배수를 오름차순으로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

 

[입출력 예]

n k result
10 3 [3, 6, 9]
15 5 [5, 10, 15]

 

[차근 차근 생각해보기]

  1. answer 배열의 길이를 n을 k로 나눈 몫의 길이로 정해준다. (왜냐하면 k의 배수가 나오기 때문)
  2. n까지 돌면서 i를 k로나눈 나머지가 0 일 경우(i이 k의 배수일 경우)
  3. i를 answer에 넣어준다.
  4. 이때 answer는 i를 k로 나눈 후 - 1을 해준다.
    • i가 3 , k가 3일 경우 -> i / k = 1이고 
    • 배열의 인덱스는 0부터 시작하기 때문에 1을 빼준다.         

 

[코드]

class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n / k];
        
        for(int i = 1; i <= n; i++){
            if(i % k == 0){
                answer[(i / k) - 1] = i;
            }
        }
        
        return answer;
    }
}

 <잘못 작성한 코드>

class Solution {
    public int[] solution(int n, int k) {
        int[] answer = new int[n / k];
        
        for(int i = 1; i <= k; i++){
            if((k * i ) <= n){
                answer[i - 1] = k * i;
            }
        }
        
        return answer;
    }
}

 

[반성할 점]

처음에 단순히 k까지 돌면서 k * i가 n보다 작거나 같으면 k * i를 answer에 넣어주는 방법을 택했다.

이 방법은 테스트 케이스는 통과 했지만 답안 제출 시 통과하지 못해 생각해보았다.

 

내가 잘못 작성한 코드는 만약 n이 100이고 k는 5일 경우 총 20개의 원소가 나와야 하는데,

k까지 돌게 되면 5까지 돌게 되어 [5, 10, 15, 20, 25] 총5개의 원소가 나와 때문에 틀린 답안 이었다.  

 

그래서 n까지 돌면서 i가 k의 배수일 경우 i를 answer에 넣어주는 방법을 택했고,

배열은 0부터 시작하기 때문에 i를 k로 나눈 몫에서 - 1을 해주었다.

-> i가 10 k 5일 경우[(i / k) - 1]은 [2 - 1] 이 되어 1이 될 것이다.

 

 이런 테스트 케이스는 통과하지만 다른 부분에서 오류 찾는 법이 아직 많이 약하다.

조금 더 천천히 깊게 고민해보는 습관을 들여야겠다.   

728x90

+ Recent posts