C#/프로그래머스
없는 숫자 더하기
ian's coding
2025. 4. 21. 17:01
728x90
반응형
💻 프로그래머스 - 없는 숫자 더하기
두 가지 풀이 방식 비교 (수학적 풀이 vs LINQ)
📌 문제 설명
0부터 9까지의 숫자 중,
numbers 배열에 포함되지 않은 숫자들을 모두 더한 값을 구하는 문제입니다.
예를 들어,
numbers = [1, 2, 3, 4, 6, 7, 8, 0] 이라면
포함되지 않은 숫자는 5와 9 → 결과는 5 + 9 = 14
✅ 제한 사항
- numbers는 중복되지 않은 0~9 사이의 정수 배열입니다.
- 배열의 길이는 1 이상 9 이하입니다.
🧠 어떻게 풀 수 있을까요?
이 문제는 다음과 같이 두 가지 대표적인 방식으로 풀 수 있습니다.
- 전체 합(0~9 = 45)에서 배열의 합을 빼는 방식
- Enumerable.Range()를 활용해 없는 숫자를 직접 찾아서 더하는 방식
각 방식의 코드와 차이점, 장단점을 비교해보겠습니다 😊
🧾 풀이 ①: 수학적 아이디어 활용 (가장 간단한 방식)
using System;
using System.Linq;
public class Solution {
public int solution(int[] numbers) {
return 45 - numbers.Sum();
}
}
🔍 설명
- 0부터 9까지 더한 값은 항상 45입니다.
- 따라서 numbers.Sum()을 빼주기만 하면,
빠지고 있는 숫자들의 합이 그대로 나옵니다!
✅ 장점
- 가장 빠르고 간결합니다 (코드도 한 줄!)
- 배열에서 직접 "없는 숫자"를 찾지 않아도 됩니다.
⚠️ 단점
- 이 방법은 문제의 성질을 알고 있어야만 쓸 수 있습니다.
(0~9라는 범위가 고정이 아니면 이 방식은 쓸 수 없어요)
🧾 풀이 ②: Enumerable.Range()와 Except() 사용
using System;
using System.Linq;
public class Solution {
public int solution(int[] numbers) {
return Enumerable.Range(0, 10).Except(numbers).Sum();
}
}
🔍 설명
- Enumerable.Range(0, 10) → 0부터 9까지의 숫자 생성
- .Except(numbers) → 배열에 없는 숫자만 남김
- .Sum() → 남은 숫자들을 모두 더함
✅ 장점
- 명시적으로 "없는 숫자"를 찾고 더한다는 로직이 드러나 있어,
가독성과 이해도가 좋습니다. - 문제 범위가 달라져도 유연하게 대응할 수 있습니다.
예: 1~100 사이의 숫자 중 누락된 숫자를 더해야 할 때 등
⚠️ 단점
- 45 - 합 방식보다 약간 무겁고 코드가 길 수 있습니다.
⚖️ 두 풀이 방식 비교 정리
항목풀이 ① (수학적)풀이 ② (LINQ)
코드 길이 | ✅ 매우 짧음 | ❌ 조금 더 김 |
실행 속도 | ✅ 빠름 | ❌ 조금 느릴 수 있음 |
직관성 | ❌ 수학 지식 필요 | ✅ 논리적으로 직관적 |
확장성 | ❌ 범위 고정 시에만 가능 | ✅ 범위 변경에도 유연 |
📝 마무리
이 문제는 단순한 것 같지만,
어떤 방식으로 접근하느냐에 따라 코드 스타일이 달라지는 대표적인 예입니다.
- 빠르고 효율적인 코드를 원하신다면 → 수학적 방식
- 명확하고 선언적인 코드를 원하신다면 → LINQ 방식
728x90
반응형