카테고리 없음

개인개발_TIL_10일차(코딩 테스트 - 약수 구하기)

티-히히 2025. 3. 11. 15:12
  • 오전
    • 수영 강습
  • 오후
    • 코딩테스트
    • 포트폴리오 정리
  • 저녁
    • 한달 인턴 신청서 제출

 

코딩 테스트 - 약수 구하기

 

링크 : https://school.programmers.co.kr/learn/courses/30/lessons/120897

 

정수 n이 매개변수로 주어질 때, n의 약수를 오름차순으로 담은 배열을 return하도록 solution 함수를 완성해주세요.

 

n result
24 [1, 2, 3, 4, 6, 8, 12, 24]
29 [1, 29]

 

 

 

내가 쓴 코드

using System;
using System.Collections.Generic;

public int[] solution(int n)
{
	//int[]는 동적으로 배열을 바꿀 수 없기 떄문에 List<int>를 선언한다.
    List<int> listAnswer = new List<int>();

	//1에서부터 n과 똑같은 수까지 반복한다. n을 나누었을 때 딱 떨어지는 수가 걸리면 그 수를 List에 넣어준다.
    for (int i = 1; i <= n; i++)
    {
        if (n % i == 0)
        {
            listAnswer.Add(i);
        }
    }

	//List를 배열로 바꿔준다.
    return listAnswer.ToArray() ;
}

 

 

1. int[]는 동적으로 배열을 바꿀 수 없기 떄문에 List<int>를 선언한다.

(List를 쓰려면 using에 using System.Collections.Generic; 를 추가해야한다.)

 

2. 1에서부터 n과 똑같은 수까지 반복한다. n을 나누었을 때 딱 떨어지는 수가 걸리면 그 수를 List에 넣어준다.

 

3. List를 배열로 바꿔준다.

 

 

다른 사람의 코드

using System;
using System.Linq;

public class Solution {
    public int[] solution(int n) {
        int[] answer = Enumerable.Range(1, n).Where(x => n % x == 0).ToArray();
        return answer;
    }
}

 

이 분은 List와 for가 아닌 Linq를 썼다.

Linq는 가독성면에서는 좋지만 성능면에서 떨어진다.

 

 SQL을 쓰던 나로썬 이게 더 익숙하고 보기 좋았다.

하지만 for문을 많이 쓰도록 연습하는게 성능면에선 더 좋을 것 같다.

 

1. Enumerable.Range(1, n) - 1부터 n까지 반복한다.

2. Where(x => n % x == 0) - n이 딱 나누어 떨어지는 수까지.

3. ToArray(); - 배열로 바꿔준다.