TIL (since 2023.08.07 ~ )

2023-09-05 TIL (나누어 떨어지는 숫자 배열)

Bastian바스티언 2023. 9. 5. 21:11

 

code kata

< 나누어 떨어지는 숫자 배열 >

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수,
solution을 작성해 주세요. divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

<제한사항>
- arr은 자연수를 담은 배열입니다
- 정수 i, j에 대해 i ≠ j 이면 arr[ i ] ≠ arr[ j ] 입니다
- divisor는 자연수입니다
- array는 길이 1이상인 배열입니다

 

<brainstorming>

처음에는 문제를 읽다가 이게 무슨소리인가 싶었는데, 이번에는 값이 두개가 있기 때문에 둘다 신경써야 한다는 것이다.

 

배열인 arr 와 그 안의 element 를 나누어 주는 역할인 divisor, 이렇게 두 가지에 대해서 조건을 작성해야 한다.

 

이번문제는 리스트와 조건문&반복문 을 사용해서 풀이하면 되는 듯하다.

using System.Collections.Generic;

public class Solution {

    public int[] solution(int[] arr, int divisor) {
    
        List<int> answer = new List<int>();
        
        for(int i=0; i<arr.Length; i++)
        {
            if(arr[i]%divisor == 0)
            {
                answer.Add(arr[i]);
            }
        }
        
        if (answer.Count == 0)
            answer new int[] { -1 };
            
        answer.Sort();
        
        return answer.ToArray();
    }
}

코드를 조금씩 뜯어서 살펴보자.

 

using System.Collections.Generic;

=> 해당 using은 리스트를 사용하기 위해서 처음에 선언해 주어야 한다.

 

public int[ ] solution( int[ ] arr, int divisor )

=> 신경써야 할 두 가지, int 형식의 배열과 divisor이다.

 

List < int > answer = new List< int >( );

=> answer 리스트를 만들어 초기화 시켜주는 작업이다.

 

for(int i = 0; i <  arr.Length; i++)

=> 입력받은 arr의 길이만큼 for 문을 돌면서 arr의 원소 하나하나를 확인하도록 한다.

 

if(arr[ i ] % divisor == 0) { answer.Add(arr[ i ]); }

=> 만약 arr의 원소 중 divisor로 나누어 떨어지면 아까 만든 리스트의 원소로 넣어준다.

 

if(answer.Count == 0) return new int [ ] { -1 };

=> 만약 나누어 떨어진게 없어서 리스트가 0개 라면(count == 0) -1을 출력하도록 한다.

 

answer.Sort( );

=> answer 리스트를 오름차순으로 정렬한다.

 

return answer.ToArray( );

=> 마지막으로, 배열을 반환해야 하지만 지금까지 만들어진 것은 리스트 이므로 ToArray( )를 사용하여 배열로 반환한다.

 

<다른 사람의 풀이>

using System.Collections.Generic;

public class Solution
{
    public int[] solution(int[] arr, int divisor)
    {
        var list = new List<int>();
        if (divisor != 1)
        {
            foreach (var v in arr)
            {
                if (v % divisor == 0)
                    list.Add(v);
            }

            if (list.Count == 0)
                list.Add(-1);
        }
        else
        {
            list.AddRange(arr);
        }

        list.Sort();

        return list.ToArray();
    }
}