728x90

[문제 설명]

최대 5명씩 탑승가능한 놀이기구를 타기 위해 줄을 서있는 사람들의 이름이 담긴 문자열 리스트 names가 주어질 때, 앞에서 부터 5명씩 묶은 그룹의 가장 앞에 서있는 사람들의 이름을 담은 리스트를 return하도록 solution 함수를 완성해주세요. 마지막 그룹이 5명이 되지 않더라도 가장 앞에 있는 사람의 이름을 포함합니다.

 

[입출력 예]

names result
["nami", "ahri", "jayce", "garen", "ivern", "vex", "jinx"] ["nami", "vex"]

 

[차근 차근 생각해보기]

  1. 배열 names의 길이까지 돌면서 5번째 마다 값을 보여주어야 하기 때문에 i에 5씩 증가시켜준다.
  2. answer 배열에 담아주기 위해 answer 배열의 길이를 names의 길이 나누기 5를 한 뒤 올림을 해준다.
  3. answer 배열에 순서대로 담아주기 위해 index 변수를 선언하여 1씩 증가하도록 한다.
  4. answer를 return 해준다.         

 

[코드]

<수정 전>

class Solution {
    public String[] solution(String[] names) {
        String[] answer = new String[(names.length / 5) + 1];
        int index = 0;
        
        for(int i = 0; i < names.length; i+=5){
            answer[index++] = names[i];
        }
        
        return answer;
    }
}

 

<수정 후>

class Solution {
    public String[] solution(String[] names) {
        String[] answer = new String[(int) Math.ceil((double)names.length / 5)];
        int index = 0;
        
        for(int i = 0; i < names.length; i+=5){
            answer[index++] = names[i];
        }
        
        return answer;
    }
}

 

[반성할 점]

처음에 코드를 돌려보니 test 케이스는 통과하여 답안 제출을 하였다. 하지만 틀린 답이라고 하여 며칠을 고민 했다.

고민해도 답이 나오지 않아 도움을 구해보니 내가 answer배열의 길이를 잘못 구했었다.

 

만약 names 배열의 길이가 5라면 answer의 길이는 1이 될 것이다.

하지만 내가 작성한 '(names.length / 5) + 1' 을 하게 되면 answer 배열의 길이가 2로 선언 될 것이다.

그래서 names의 길이에서 5로 나눈 몫을 한 뒤에 올림을 해주면 names의 길이가 5일 경우 answer에도 1개의 원소가 담길 것이고, 5초과 일 경우 올림이 되어 answer 배열의 길이가 선언될 것이다.

 

아직 테스트 케이스는 통과하는데 답이 아닐 경우 왜 답이 아닌지 찾기가 너무 힘들다..😭

이번 문제의 문제점을 꼭 기억해서 비슷한 경우가 있을 때, 해결해보아야겠다..

 

아..! 그리고 Math.ceil의 메소드엔 double 타입이기 때문에 꼭 괄호 안엔 double 타입으로 들어가야한다..

요거 때문에 다 풀고도 오류나서 한참 헤멨다..😓    

728x90
728x90

[문제 설명]

이 문제에서 두 정수 배열의 대소관계를 다음과 같이 정의합니다.

  • 두 배열의 길이가 다르다면, 배열의 길이가 긴 쪽이 더 큽니다.
  • 배열의 길이가 같다면 각 배열에 있는 모든 원소의 합을 비교하여 다르다면 더 큰 쪽이 크고, 같다면 같습니다.

두 정수 배열 arr1과 arr2가 주어질 때, 위에서 정의한 배열의 대소관계에 대하여 arr2가 크다면 -1, arr1이 크다면 1, 두 배열이 같다면 0을 return 하는 solution 함수를 작성해 주세요.

 

[입출력 예]

arr1 arr2 result
[49, 13] [70, 11, 2] -1
[100, 17, 84, 1] [55, 12, 65, 36] 1
[1, 2, 3, 4, 5] [3, 3, 3, 3, 3] 0

 

[차근 차근 생각해보기]

  1. 먼저 arr1, arr2의 배열들을 각각의 길이까지 돌면서 각 원소들의 합을 구해준다.
  2. arr1의 길이가 arr2의 길이보다 작으면 1을 반환하고 아니면 2를 반환한다.
  3. 만약 arr1의 길이가 arr2의 길이와 같고 각 두 배열의 원소의 합이 같다면 0을 반환한다.
  4. arr1의 길이가 arr2의 길이와 같고 arr1의 원소의 합이 arr2의 원소의 합보다 크다면 1을 반환한다.
  5. arr1의 길이가 arr2의 길이와 같고 arr1의 원소의 합이 arr2의 원소의 합보다 작다면 -1을 반환한다.

 

[코드]

<수정 전>

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        int ar1 = 0;
        int ar2 = 0;

        for(int i : arr1){
            ar1 += i;
        }

        for(int i : arr2){
            ar2 += i;
        }

        if(arr1.length > arr2.length){
            answer = 1;
        }else{
            answer = -1;
        }

        if(arr1.length == arr2.length && ar1 == ar2){
            answer = 0;
        }else if(arr1.length == arr2.length && ar1 > ar2){
            answer = 1;
        }else if(arr1.length == arr2.length && ar1 < ar2){
            answer = -1;
        }


        return answer;
    }
}

 

<수정 후>

class Solution {
    public int solution(int[] arr1, int[] arr2) {
        int answer = 0;
        int ar1 = 0;
        int ar2 = 0;
        
        for(int i : arr1){
            ar1 += i;
        }
        
        for(int i : arr2){
            ar2 += i;
        }
        
        if(arr1.length > arr2.length || (arr1.length == arr2.length && ar1 > ar2)){
            answer = 1;
        }else if(arr1.length < arr2.length || arr1.length == arr2.length && ar1 < ar2){
            answer = -1;
        }else{
            answer = 0;
        }      
          
        return answer;
    }
}

 

[반성할 점]

문제를 그대로 코드로 옮겨 잘 풀었다.

하지만 수정 전 코드를 보면 조금 지저분하다는 느낌이 강했다.

 

공통된 것을 찾아보니 return되는 값이 공통되었고 공통되는 조건을 한 곳에 묶었더니 조금 더 깔끔한 코드가 되었다.

보기 좋은 코드가 좋은 코드라고해서 최대한 보기 좋고 깔끔하게 만들어보려고 하는데 아직 어렵다ㅠ

꾸준히 하다보면 나도 언젠간 성장해있겠지..!   

728x90
728x90

[문제 설명]

정수로 이루어진 리스트 num_list가 주어집니다. num_list에서 가장 작은 5개의 수를 제외한 수들을 오름차순으로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

num_list result
[12, 4, 15, 46, 38, 1, 14, 56, 32, 10] [15, 32, 38, 46, 56]

 

[차근 차근 생각해보기]

  1. answer 배열을 num_list의 길이에서  5을 빼주어 배열을 만들어준다.
  2. 그 다음 정렬을 해주는데 정렬은 아래와 같이할 수 있다.
  3. num_list의 길이까지 두번 반복하는데 두번째 반복문은 i + 1번째부터 시작한다.
  4. 만약 num_list의 i번째가 j번째보다 크다면 tmp에 num_list의 i번째를 넣어준다.
  5. num_list의 i번째에 j번째를 넣어주고 num_list의 j번째에 tmp에 담긴 num_list의 i번째를 넣어준다.
  6. answer 배열에 원소를 넣어주기 위해 index 변수를 선언하여 0으로 초기화 해준다.
  7. 5부터 num_list의 길이까지 돌면서 answer에 num_list의 i번째를 넣어준다.
  8. 이때 index는 ++를 하여 반복문이 돌면 1 증가하도록 한다.

[코드]

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length - 5];
        
        for(int i = 0; i < num_list.length; i++){
            for(int j = i + 1; j < num_list.length; j++){
                if(num_list[i] > num_list[j]){
                    int tmp = num_list[i];
                    num_list[i] = num_list[j];
                    num_list[j] = tmp;
                }
            }
        }
        
        int index = 0;
        
        for(int i = 5; i < num_list.length; i++){
            answer[index++] = num_list[i];
        }
        
        return answer;
    }
}

 

[반성할 점]

배열 정렬의 원리를 이해하기 위해 for문으로 직접 만들어보았다.

tmp 변수에 더 큰 값을 넣어주고 큰 값이 있던 자리에 작은 값을 넣어준다.

그 다음 작은 값이 있던 자리에 tmp에 담은 값을 넣어준다.

 

처음에 위의 코드를 다른 블로그에서 보고 따라 쳤는데 이해하는데 조금 오래 걸렸다.

무작정 모른다고 블로그 본 것이 조금 후회된다..ㅠㅠ

앞으로는 조금 더 사고해본 뒤 정 안될때 인터넷을 찾아보아야겠다.    

 

다 만들어 놓고 배열의 인덱스는 0부터 시작하는데 answer 배열에 원소를 넣는 방법을 몰라 또 헤맸다.

생각해보니 변수 선언을 해놓고 증감식을 사용하면 되는 것이었다..멍충멍충..😓

 

마음이 점점 급해져서 그런지 빨리 풀어야겠다는 강박이 다시 나오기시작했다..

이럴 때 일수록 천천히 해야하는데 다시 마음 잡고 천천히 꾸준히 해보자..!  

728x90
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
728x90

[문제 설명]

정수 리스트 num_list와 정수 n이 주어질 때, n 번째 원소부터 마지막 원소까지의 모든 원소를 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

num_list n result
[2, 1, 6] 3 [6]
[5, 2, 1, 7, 5] 2 [2, 1, 7, 5]

 

[차근 차근 생각해보기]

  1. answer의 배열의 길이를 num_list의 길이에서 n을 빼고 +1 한 길이로 만들어준다. 
    • 배열의 인덱스는 0부터 시작하기 때문에 n이 3일 경우 마지막 원소가 나오려면 num_list의 길이에서 n을 빼고 +1을 해주어야한다. 
  2. answer의 길이 만큼 돌면서 answer의 i번째에 num_list의 (n - 1) + i번째 원소를 넣어준다.  
  3. answer를 return 해준다.

 

[코드]

<수정전>

import java.util.Arrays;
class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = Arrays.copyOfRange(num_list, n - 1, num_list.length);

        return answer;
    }
}

<수정후>

class Solution {
    public int[] solution(int[] num_list, int n) {
        int[] answer = new int[(num_list.length - n) + 1];

        for(int i = 0; i < answer.length; i++){
                answer[i] = num_list[(n - 1)+ i];
        }
        
        return answer;
    }
}

 

[반성할 점]

아무리 생각을 해보아도 어떻게 n의 원소를 넣어야할지 생각이 안나 검색해본 결과 Arrays.copyOfRange()라는 메소드를사용하면 배열을 복사하여 넣어줄 수 있다고 하였다. 

 

사용법은 Arrays.copyOfRange(원본배열, 복사할 시작 인덱스, 복사할 끝 인덱스) 와 같이 사용 하면 됐고 메소드 하나로 간단하게 풀리는 문제였다.

 

하지만 나는 아직 메소드 사용보다는 생각하는 사고를 기르고 싶어서 반복문을 이용하여 풀어보고 싶었다. 먼저 answer배열의 길이를 어떻게 해주어야 할지 고민했고 고민 결과  배열의 인덱스는 0부터 시작하기 때문에 n이 3일 경우 마지막 원소가 나오려면 num_list의 길이에서 n을 빼고 +1을 해주면 조건에 맞게 배열의 길이가 만들어졌다.

 

하지만 answer배열에 조건 대로 어떻게 넣어야할지 막막했는데 길이가 5인 배열에서 n이 2일 때 총 4개의 원소가 들어가야한다. n이 2라는 것은 배열에서 1번째를 의미하고 n이 3일 경우 배열의 2번째를 의미하기 때문에 1, 2, 3, 4 번째의 원소가 들어가야 했다.

 

이 규칙을 찾고나니 먼저 n에서1을 빼주고 i만큼 더해주면 내가 원하는 위치의 원소를 넣을 수 있었다.

 

조금만 더 규칙을 찾고 나면 풀 수 있었던 문제 같다..!!               

728x90
728x90

[문제 설명]

문자열 my_string과 정수 배열 index_list가 매개변수로 주어집니다. my_string의 index_list의 원소들에 해당하는 인덱스의 글자들을 순서대로 이어 붙인 문자열을 return 하는 solution 함수를 작성해 주세요.

 

[입출력 예]

my_string index_list result
"cvsgiorszzzmrpaqpe" [16, 6, 5, 3, 12, 14, 11, 11, 17, 12, 7] "programmers"
"zpiaz" [1, 2, 0, 0, 3] "pizza"

 

[차근 차근 생각해보기]

  1. my_string의 문자열을 한자리씩 가져오기 쉽게 나누어 배열로 만든다.
  2. index_list의 길이까지 돌면서 answer에 str의 i번째를 넣어준다.
  3. answer를 return 한다.     

 

[코드]

<수정전>

class Solution {
    public String solution(String my_string, int[] index_list) {
        String[] answer = new String[index_list.length];

        String[] str = my_string.split("");

        for(int i = 0; i < index_list.length; i++){
            for(int j = 0; j < str.length; j++){
                if(index_list[i] == j){
                    answer[i] = str[j];
                }
            }
        }  

        return String.join("", answer);
    }
}

<수정후>

class Solution {
    public String solution(String my_string, int[] index_list) {
        String answer = "";
        String[] str = my_string.split("");

        for(int i = 0; i < index_list.length; i++){
            answer += str[index_list[i]];   
        }  

        return answer;
    }
}

 

[반성할 점]

처음의 answer 배열의 길이를 index_list의 길이 만큼 만들어주고 my_string의 값을 하나씩 가져오기 위해 split메소드를 이용하여 str 배열을 만들어주었다. index_list 길이만큼 돌면서 str의 길이 만큼 또 반복해주고 만약에 index_list의 i번째가 j와 같다면 answer 배열에 str의 j번째 원소를 넣어 String.join 메소드를 이용하여 문자열을 return 하는 방법으로 풀었다.

 

하지만 위의 풀이를 보고 있는데 복잡하고 필요 없는 코드가 많다고 생각했다. 나에게 항상 많은 도움을 주시는 분께 코드의 문제점에 대해 물어봤고 굳이 answer를 배열로 지정 해주지 않고 그냥 문자열로 초기화 해준 뒤 index_list의 길이만큼 돌면서 answer에 str의 index_list의 i번째를 넣어주면 된다고 하였다.

 

훨씬 간결하고 깔끔한 코드였다. 생각해보니 배열의 원소를 가져올때 대괄호 안에 인덱스를 넣어주는데 index_list[i] 이 코드를 넣어주면 i가 0일때 index_list의0번째인 16이 나올것이고 그럼 str[16]이 되니 p가 나올 것이다.

 

이렇게 유연한 사고를 하며 풀어야하는데 아직은 그러지 못하는 것 같다..(마음이 급한 것도 한 몫이 되는 듯..)

차근차근 하나하나 하다 보면 언젠간 성장해 있을 내 모습을 보며 화이팅 해야겠다.      

728x90
728x90

[문제 설명]

정수 start와 end가 주어질 때, start부터 end까지의 숫자를 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

start end result
3 10 [3, 4, 5, 6, 7, 8, 9, 10]

 

[차근 차근 생각해보기]

  1. answer 배열의 길이를 end에서 start를 빼고 + 1을 하여 초기화해준다. 
  2. answer의 길이만큼 돌면서
  3. answer의 i번째에 start를 1씩 증가하며 넣어준다.
  4. answer를 return 해준다.    

 

[코드]

class Solution {
    public int[] solution(int start, int end) {
        int[] answer = new int[(end - start) + 1];
        
        for(int i = 0; i < answer.length; i++){
            answer[i] = start++;
        }
        
        return answer;
    }
}

 

[반성할 점]

이 문제를 푸는데 3일이 걸렸다. 처음엔 start부터 end까지 반복하는 반목문을 쓰기도 하였다.

다시 코드 순서를 천천히 생각해보니 answer의 길이는 end에서 start를 빼고 + 1을 해준 길이로 선언해주고,

answer의 배열에 담아야하기 때문에 answer의 길이 만큼돌면서 start를 더해주면 되는 것이었다.

이때 ++start는 먼저 더해주고 start가 나오기 때문에 start를 먼저 넣어주고 후에 ++를 해주어야된다고 판단했다.

 

다시 한번 코드의 순서를 잘 생각해보기..아직 너무 많이 부족하다..😭           

728x90
728x90

[문제 설명]

정수가 담긴 리스트 num_list가 주어질 때, 모든 원소들의 곱이 모든 원소들의 합의 제곱보다 작으면 1을 크면 0을 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

num_list result
[3, 4, 5, 2, 1] 1
[5, 7, 8, 3] 0

 

[차근 차근 생각해보기]

  1. num_list를 돌면서 num_list의 원소를 곱해주고 더해준다.
  2. sum은 제곱이 되어야 하기 때문에 제곱으로 만들어준 후
  3. multiple이 sum보다 작다면 1을 return하고 크다면 0을 리턴한다.  

 

[코드]

<수정 전>

class Solution {
    public int solution(int[] num_list) {
        int answer = 0;
        int multiple = 1;
        int sum = 0;
        
        for(int i : num_list){
            multiple *= i;
            sum += i;
        }
        
        sum = (int)Math.pow(sum, 2);
        
        if(multiple < sum){
            answer = 1;
        }else{
            answer = 0;
        }

        return answer;
    }
}

 <수정 후>

class Solution {
    public int solution(int[] num_list) {

        int multiple = 1;
        int sum = 0;
        
        for(int i : num_list){
            multiple *= i;
            sum += i;
        }
        
        sum = (int)Math.pow(sum, 2);
        
        return multiple < sum ? 1 : 0;
    }
}

 

[반성할 점]

이 문제는 이틀 동안 풀지 못했다..계속 오류가 나서 Intellij에서 디버그를 돌려보았고

multiple이 0이 되었다. 그럴 수 밖에 없었다.. 처음에 multiple을 선언할때 int multiple = 0;으로하였기 때문에

아무리 곱해도 0이 나올수 밖에 없었다. 그래서 multiple을 1로 초기화 한 뒤 실행해보니 잘 작동하였다.

 

하지만 불필요한 코드가 너무 많은 것 같아 어떻게 줄여볼까 생각하던 중 삼항 연산자가 생각 났다.

삼항연산자는 (조건문) ? 참 : 거짓으로 조건문이 참일 경우 참의 값이 나오고 거짓일 경우 거짓의 값이 나오는 것이다.

그래서 multiple이 sum보다 작으면 참이기 때문에 1을 return하고 거짓일 경우 0을 return 하도록 하였다.                     

728x90
728x90

[문제 설명]

'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

 

[입출력 예]

rny_string result
"masterpiece" "rnasterpiece"
"programmers" "prograrnrners"
"jerry" "jerry"
"burn" "burn"

 

[차근 차근 생각해보기]

  1. replace함수를 사용하여 "m"을 "rn"으로 치환하기

 

[코드]

<수정 전>

class Solution {
    public String solution(String rny_string) {
        String answer = "";
        
        for(int i = 0; i < rny_string.length(); i++){
            if(rny_string.charAt(i) == 'm'){
                return rny_string.replace("m", "rn");
            }
            answer = rny_string;
        }
        return answer;
    }
}

<수정 후>

class Solution {
    public String solution(String rny_string) {
        
        return rny_string.replace("m", "rn");
        
    }
}

 

[반성할 점]

replace()는 원하는 문자를 바꾸고 싶은 문자로 바꾸는 함수이다.

굳이 반복문을 사용하지 않아도 되는데 쓸데 없는 코드를 작성하였다..

 

😓 코드가 어떻게 동작할지 차근 차근 생각해보기..     

728x90
728x90

[문제 설명]

정수 리스트 num_list와 정수 n이 주어질 때, num_list의 첫 번째 원소부터 마지막 원소까지 n개 간격으로 저장되어있는 원소들을 차례로 담은 리스트를 return하도록 solution 함수를 완성해주세요.

 

[입출력 예]

num_list n result
[4, 2, 6, 1, 7, 6] 2 [4, 6, 7]
[4, 2, 6, 1, 7, 6] 4 [4, 7]

 

[차근 차근 생각해보기]

  • 이름이 arr인 ArrayList를 만든다.
  • num_list의 길이 만큼 돌면서 i가 n의 배수이면 arr에 num_list의 i번째를 넣어준다.
  • arr의 사이즈만큼의 answer 배열을 만들어 준 후
  • arr의 size만큼 돌면서 answer배열에 arr의 i번째 요소를 Integer에서 int로 바꾸어 넣어준다.
  • answer를 리턴 해준다.

 

[결과]

<수정 전>

class Solution {
    public int[] solution(int[] num_list, int n) {
       int[] answer = new int[num_list.length/n];

        for(int i = 0; i < num_list.length; i++){
                if(i%n == 0){
                    answer[i/n] = num_list[i];
                }
        }

        return answer;
    }
}

 

<수정 후>

import java.util.ArrayList;
class Solution {
    public int[] solution(int[] num_list, int n) {

        ArrayList<Integer> arr = new ArrayList<>();

        for(int i = 0; i < num_list.length; i++){
                if(i%n == 0){
                    arr.add(num_list[i]);
                }
        }
        int[] answer = new int[arr.size()];

        for(int i = 0; i < arr.size(); i++){
            answer[i] = arr.get(i).intValue();
        }

        return answer;
    }
}

 

[반성할 점]

<수정 전>

 answer 배열을 num_list를 n으로 나눈 길이 만큼 선언 해주었다.

n개 간격이면 n의 배수가 되어야 하기 때문에 'i가 n의 배수이면' 이라는 조건문을 넣어주었다.

answer의 i번째에 num_list의 i번째를 넣어주려 했으나

이렇게 되면 answer의 i번째에 0,1,2,3 이런 순서가 아닌 n의 배수가 들어가게 되어 오류가 났다.

 

 생각해보니 n이 2이라면 num_list의 0, 2, 4, 6 순서로 들어갈 것이고, 

num_list[0] => answer[0] / num_list[2] => answer[1] / num_list[4] => answer[2]의 방식으로 들어가야했다.

그래서 answer[i / n]를 해주면 위와 같은 방식으로 값이 들어갈 수 있었다.

 

<수정 후>

하지만 위의 방식은 n의 2일 경우였다. 예제인 n이 4일 경우엔 answer 배열의 길이를 num_list의 n으로 나누게 된다면

6 / 4 = 1이 되어 answer 배열의 길이는 1이 되어 오류가 났다.

 

그래서 answer 배열의 길이를 신경 쓰지 않고 하기 위해 ArrayList로 만들어 ArrayList에 'i가 n의 배수이면' num_list의 i번째를 넣어 주었고 배열로 바로 변환하여 return을 해주려 했다. 생각해보니 ArrayList는 Wrapper 클래스를 사용하고 있어 arr인 ArrayList를 반복문으로 돌면서 intValue()라는 메소드를 사용 하여 Integer 객체에서 int형 값을 뽑아주는 메소드를 사용하였다.

 

ArrayList를 사용하는 것은 내 생각이 아닌 친구의 제안이었다..ㅠㅠ 아직 저런 사고까지 하는 것은 힘든 것 같다..

그래도 ArrayList라는 힌트를 얻어 나머지는 검색하면서 잘 해결해냈다..!! 이런 저런 케이스를 경험하는 것이라고 생각하고 문제를 많이 많이 풀어보고 내 것으로 만들어야겠다.

 

728x90

+ Recent posts