문제 설명
array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.
제한사항
arr은 자연수를 담은 배열입니다.
정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
divisor는 자연수입니다.
array는 길이 1 이상인 배열입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/12910
using System;
public class Solution {
public int[] solution(int[] arr, int divisor) {
int count = 0;
for (int i = 0; i < arr.Length; i++) {
count = arr[i] % divisor == 0 ? count + 1 : count;
}
int[] answer = new int[count];
if (count == 0) {
answer = new int[1];
answer[0] = -1;
return answer;
}
count = 0;
for (int i = 0; i < arr.Length; i++) {
if (arr[i] % divisor == 0) {
answer[count] = arr[i];
count++;
}
}
Array.Sort(answer);
return answer;
}
}
arr 배열에서 divisor 로 나누어 지는 수를 먼저 구하고 그 수 만큼의 길이의 answer배열을 만들고 다시 arr 배열 루프를 돌아 값을 넣는 방식으로 정답을 구했다.
List를 쓰면 배열의 길이를 구해서 만들 필요가 없어지기 때문에 코드가 간결해 질 수 있다.
using System.Collections.Generic;
public class Solution {
public int[] solution(int[] arr, int divisor) {
List<int> answer = new List<int>();
foreach(int num in arr) {
if (num % divisor == 0) {
answer.Add(num);
}
}
if (answer.Count != 0) {
answer.Sort();
} else {
answer.Add(-1);
}
return answer.ToArray();
}
}
리턴값이 배열이여야 하기때문에 마지막에 List.ToArray() 를 사용해서 List를 새배열에 복사해주어야 한다. 이 사실을 까먹고 일일이 타이핑을 했다;;
https://learn.microsoft.com/ko-kr/dotnet/api/system.collections.generic.list-1.toarray?view=net-7.0