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 |