본문 바로가기
C#/프로그래머스

[프로그래머스] C# : 나누어 떨어지는 숫자 배열

by TODAYCODE 2021. 7. 27.
반응형

프로그래머스 코딩테스트 1단계 - 나누어떨어지는 숫자배열

 

코딩테스트 연습 - 나누어 떨어지는 숫자 배열

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

programmers.co.kr

 

문제의 핵심

1. 배열의 각 원소에 접근하고 조건에 맞는 값만 가져올 수 있는가?

2. 리스트를 사용할 수 있는가?

 


일단 코딩테스트가 항상 그렇듯,

문제를 잘 읽고 제대로 이해하는 것이 매우 중요하다.

 

 

이번 문제는,

숫자로 이루어진 배열 arr가 주어지고, 두번째로 divisor값이 주어진다.

arr의 각 원소들을 divisor로 나눴을 때 나누어 떨어지는 값들만 모아서

오름차순으로 정렬하면 되는 문제이다.

 

arr의 길이가 정해져 있지 않고 계속 달라지기 때문에

리스트를 사용해주는 것이 효과적이다.

따라서 리스트를 하나 생성해주고

 

for문을 arr의 길이만큼 돌려서 arr의 각 요소가 divisor로 나눠떨어지는지 체크하고

참인 값들만 리스트에 넣어서 보관해준다.

 

이러면 모든 절차가 끝이나고,

결과를 리턴할 때는,

리스트의 길이가 0이면 -1로,

0이 아니면, 리스트를 배열로 바꿔서 리턴해주면 된다.

 

 

 

백준의 단계별풀어보기를 먼저 풀다가 프로그래머스로 갑자기 넘어오게되면

문제를 보자마자 어렵다고 느낄 수도 있는데

이건 그냥 문제가 글로 풀어져있어서 그런 것 같다.

 

 

 

정답 코드

// 리스트를 사용하기 위해서 선언
using System.Collections.Generic;

public class Solution {

    public int[] solution(int[] arr, int divisor) {
    
    	// result 리스트를 만들어 준다.
        List<int> result = new List<int>();
        
        // 입력받은 arr의 길이만큼 for문을 돌면서 arr의 원소하나하나를 확인
        for(int i=0; i<arr.Length; i++)
        {
        	// arr의 원소 중 divisor로 나누어 떨어지면
            if(arr[i]%divisor == 0)
            {
            	// 아까 만든 리스트의 원소로 넣어준다.
                result.Add(arr[i]);
            }
        }
        
        // 만약 나눠떨어진게 없어서 리스트가 0개라면 -1을 출력
        if (result.Count == 0)
            return new int[] { -1 };
            
        // result리스트를 오름차순으로 정렬해준다.
        result.Sort();
        
        // 배열을 반환해달라고 했으므로 ToArray()를 써서 배열로 리턴함
        return result.ToArray();
    }
}

 

 

 

 

 

반응형

댓글