코딩 테스트/프로그래머스 (기초)

[C#][프로그래머스 > 코딩테스트 기초] 길이에 따른 연산

스누ㅍl 2024. 7. 30. 16:33

프로그래머스 > 코딩테스트 연습 > 코딩 기초 트레이닝 > 길이에 따른 연산

https://school.programmers.co.kr/learn/courses/30/lessons/181879

 

📒 문제

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

 

제한사항

  • 2 ≤ num_list의 길이 ≤ 20
  • 1 ≤ num_list의 원소 ≤ 9
  • num_list의 원소를 모두 곱했을 때 2,147,483,647를 넘는 입력은 주어지지 않습니다.

 

입출력 예

num_list result
[3, 4, 5, 2, 5, 4, 6, 7, 3, 7, 2, 2, 1] 51
[2, 3, 4, 5] 120

 

입출력 예 설명

 

입출력 예 #1

  • 리스트의 길이가 13이므로 모든 원소의 합인 51을 return합니다.

입출력 예 #2

  • 리스트의 길이가 4이므로 모든 원소의 곱인 120을 return합니다.

💻 소스코드

using System;
using System.Linq;

public class Solution {
    public int solution(int[] num_list) {
        int num = 1;
        if (num_list.Length >= 11) return num_list.Sum();
        else
        {
            foreach(int i in num_list)
            {
                num *= i;
            }
            
            return num;
        }
    }
}

 

다른 풀이

using System;
using System.Linq;

public class Solution {
    public int solution(int[] num_list) {
        return num_list.Length >= 11 ? num_list.Sum() : num_list.Aggregate((c, n) => c*n);
    }
}

 

참고 사이트

Aggregate() : https://ibocon.tistory.com/113

📝 풀이

첫번째 풀이의 경우 더하기는 Sum() 메서드를 통해서 한번에 연산했지만, 곱하는 방식은 for문을 통해서 누적했다.

이 때문에 코드 통일성도 떨어지고 한번에 곱하는 방법을 찾아보았다.

 

그래서 찾은 방법이 Linq메서드 중 Aggregate()를 사용하는 방식이다.

덕분에 삼항연산자로 깔끔하게 정리할 수 있었다.


관련 포스팅

 

 

[C# 문법] Enumerable 클래스

최근 수정: 2024.07.29Enumerable 클래스 내용 중 새로 알게되거나 사용했던 메서드들 기록하는 곳입니다. Enumerable 클래스Enumerable 클래스는 LINQ의 일부로 IEnumerable 인터페이스를 구현하는 컬렉션 클래

twd0622.tistory.com