09.14 프로그래머스 코딩테스트

곽민규·2023년 9월 14일
0

코딩테스트 연습

목록 보기
8/12

나누어 떨어지는 숫자 배열

문제 설명

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

profile
취준생

0개의 댓글