문제 풀기/C#

13. 자릿수 더하기 (.Select 함수, .Sum() 함수)

kagan-draca 2025. 1. 13. 14:50

 

1) 풀이 : 입력값 n을 문자열로 변경 후 반복문을 통해 각 자리수 더하기

using System;
using System.Linq;

public class Solution {
    public int solution(int n) {
        string temp = n.ToString();
        int sum = 0;
        for(int i = 0; i < temp.Length; i++)
        {
            sum += int.Parse(temp[i].ToString());
        }
        return sum;
    }
}

 

2) 풀이 : 입력값 n을 do-while문과  %(나머지) 10과 /(나누기) 10을 이용해 각 자리수 더하기

using System;
using System.Linq;

public class Solution {
    public int solution(int n) {
        int sum = 0;
        do{
            sum += n % 10;
            n /= 10;
        }while(n != 0);
        return sum;
    }
}

 

3) 풀이 : 입력값 n을 문자열로 바꾼 후 내장 함수 Select로 각 문자를

                 정수형으로 변경 후 Sum()함수로 더하기

using System;
using System.Linq;

public class Solution {
    public int solution(int n) {
        return n.ToString().Select(c => int.Parse(c.ToString())).Sum();
    }
}

 

위와 같이 아이디어 문제를 풀 수는 있겠다는 생각은 이뤄졌지만,

관련 문법을 몰랐기 때문에 인터넷을 통해 자료를 조사한 결과

 

Select 함수는 

C#의 Linq(Language Integrated Query)에서 제공하는 메서드 중 하나로

배열, 리스트, 문자열각 요소를 변환 하는데 사용 됐다.

 

ex1) 정수형 배열

int[] numbers = { 1, 2, 3, 4, 5 };

var squares = numbers.Select(n => n * n);

foreach (var square in squares)
{
    Console.WriteLine(square);
}

 

결과

1
4
9
16
25

 

ex2) 문자열 배열

string[] words = { "hello", "world", "linq" };

var upperWords = words.Select(word => word.ToUpper());

Console.WriteLine(string.Join(", ", upperWords));

 

결과

HELLO, WORLD, LINQ

 

ex3) 문자열 조작

string input = "123";
var digits = input.Select(c => int.Parse(c.ToString()));

foreach (var digit in digits)
{
    Console.WriteLine(digit);
}

 

결과

1
2
3

 

 

와 같이 정수형 배열, 문자열, 문자열 배열 등에서 원하는 값을 조작할 수 있었다. 그 뿐만 아니라,

 

ex4) index 조작

string[] names = { "Alice", "Bob", "Charlie" };

var indexedNames = names.Select((name, index) => $"{index + 1}: {name}");

foreach (var name in indexedNames)
{
    Console.WriteLine(name);
}
1: Alice
2: Bob
3: Charlie

 

index를 조작해 원하는 결과를 조작할 수도 있었다.

 

이렇게 조작된 결과물을 바탕으로 .Sum() 함수를 통해

 

모든 값이 더해진 결과를 얻어낼 수 있었다.

 

add)

 

아무래도 형변환이 적은 do-while문과 %(나머지), /(나누기) 연산을 수행하는 것이

가장 짧은 수행시간을 필요로 하는 것을 확인할 수 있다.

 

'문제 풀기 > C#' 카테고리의 다른 글

15. 나머지가 1이 되는 수 찾기  (0) 2025.01.13
14. 약수의 합 (Math.Sqrt(정수형))  (0) 2025.01.13
12. 평균 구하기  (0) 2025.01.13
11. 짝수와 홀수  (0) 2025.01.13
10. 배열의 평균( int 형 배열.Average() 함수)  (0) 2025.01.13