숨어있는 숫자의 덧셈
https://school.programmers.co.kr/learn/courses/30/lessons/120851
문자열 매개변수가 주어질 때 문자열 안에 있는 자연수들의 합을 반환하는 문제이다.
내가 작성한 풀이는 이렇다.
using System;
public class Solution
{
public int solution(string my_string)
{
int answer = 0;
foreach(char c in my_string)
{
if(char.IsDigit(c))
{
answer += c;
}
}
return answer;
}
}
▼ 결과

왜 틀렸을까?

오답 핵심 원인
char 를 그대로 더했다.
answer += c 에서 c 는 int 가 아닌 char 타입이다.
그래서 기댓값 10 이 아닌 다른 값이 나오게 되었다.
그럼 왜 반환 값이 202 가 나왔을까?
입력 값 "aAb1B2cC34oOp" 에서 문자끼리 값을 더했다면 "1234" 가 나왔어야 했는데 실제로는 202 가 나왔을까?
C# 에서 char 끼리 더하면 문자열로 이어붙는 게 아니라, 유니코드 ( ASCII ) 값이 더해진다.
유니코드 값이란?
컴퓨터는 문자를 저장할 때 각 문자에 고유한 숫자를 부여하는데, 이를 유니코드 ( 또는 ASCII ) 값이라고 한다.
숫자 문자의 유니코드 값은 아래와 같다.
| 문자 | 유니코드 값 |
| '0' | 48 |
| '1' | 49 |
| '2' | 50 |
| '3' | 51 |
| '4' | 52 |
오답 풀이에서는 이 값들의 유니코드를 더하게 된다.
'1' → 49
'2' → 50
'3' → 51
'4' → 52
49 + 50 + 51 + 52 = 202
올바른 풀이
방법 1 : - '0' 사용
using System;
public class Solution
{
public int solution(string my_string)
{
int answer = 0;
foreach(char c in my_string)
{
if(char.IsDigit(c))
{
answer += c - '0';
}
}
return answer;
}
}
'0' 의 유니코드는 48 이므로 c - '0' 은 아래와 같이 동작한다.
'1' - '0' = 49 - 48 = 1
'2' - '0' = 50 - 48 = 2
'3' - '0' = 51 - 48 = 3
'4' - '0' = 52 - 48 = 4
1 + 2 + 3 + 4 = 10
방법 2 : char.GetNumericValue() 사용
using System;
public class Solution
{
public int solution(string my_string)
{
int answer = 0;
foreach(char c in my_string)
{
if(char.IsDigit(c))
{
answer += (int)char.GetNumericValue(c);
}
}
return answer;
}
}
정리
char 는 문자이다. 숫자처럼 생겼어도 그냥 더하면 유니코드 값이 더해진다.
char 를 정수로 사용하려면 반드시 변환 과정이 필요하다는 것을 기억하자.
'📖TIL > ✅CodingTest' 카테고리의 다른 글
| 옷가게 할인 받기 (0) | 2026.06.01 |
|---|---|
| 문자 리스트를 문자열로 변환 (0) | 2026.05.29 |
| 문자열 패딩 ( Padding ) (0) | 2026.05.14 |
| 등차수열의 합 (0) | 2026.05.12 |
| 반복문 없이 반복된 문자열 만들기 (0) | 2026.05.10 |