2023-09-05 TIL (나누어 떨어지는 숫자 배열)
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();
}
}