
Problem ๐ป
https://school.programmers.co.kr/learn/courses/30/lessons/120851
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๋ฌธ์ ์ค๋ช
๋ฌธ์์ด my_string์ด ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง๋๋ค. my_string์์ ๋ชจ๋ ์์ฐ์๋ค์ ํฉ์ returnํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- 1 ≤ my_string์ ๊ธธ์ด ≤ 1,000
- my_string์ ์๋ฌธ์, ๋๋ฌธ์ ๊ทธ๋ฆฌ๊ณ ํ์๋ฆฌ ์์ฐ์๋ก๋ง ๊ตฌ์ฑ๋์ด์์ต๋๋ค.
์ ์ถ๋ ฅ ์my_stringresult
| "aAb1B2cC34oOp" | 10 |
| "1a2b3c4d123" | 16 |
์ ์ถ๋ ฅ ์ ์ค๋ช
์ ์ถ๋ ฅ ์ #1
- "aAb1B2cC34oOp"์์ ํ์๋ฆฌ ์์ฐ์๋ 1, 2, 3, 4 ์ ๋๋ค. ๋ฐ๋ผ์ 1 + 2 + 3 + 4 = 10 ์ returnํฉ๋๋ค.
์ ์ถ๋ ฅ ์ #2
- "1a2b3c4d123Z"์์ ํ์๋ฆฌ ์์ฐ์๋ 1, 2, 3, 4, 1, 2, 3 ์ ๋๋ค. ๋ฐ๋ผ์ 1 + 2 + 3 + 4 + 1 + 2 + 3 = 16 ์ returnํฉ๋๋ค.
์ ์์ฌํญ
- ์ฐ์๋ ์ซ์๋ ๊ฐ๊ฐ ํ ์๋ฆฌ ์ซ์๋ก ์ทจ๊ธํฉ๋๋ค.
Approach 1 โ- ๋์ ์ด๊ธฐ ์ ๊ทผ ๋ฐฉ์
String์ ํ๋์ ์์๋ง๋ค intํ์ธ์ง ํ์ธํด์ผ ํจ.
- my_string.charAt(i)๋ก for๋ฌธ์ ๋๋ ค์ intํ์ธ์ง ํ์ธํด์ผ ํ๋๋ฐ ์๋ String์ intํ์ผ๋ก ๋ถ๋ถ ๋ณํ์ด ํ์ํ๋ค.
์ด๋ ๋ชจ๋ String์ ํ์ ์ ์ซ์๋ก ์ด๋ป๊ฒ ๊ตฌ๋ถํ์ง?
if๋ฌธ์ผ๋ก String ํ์ ์ 1~9๊น์ง ๋ชจ๋ ์ผ์นํ๋์ง ํ์ธํ๋๊ฑด ๋๋ฌด ๋ฒ๊ฑฐ๋กญ๋ค.
Approach 2 โญ - ๋์ ์ด๊ธฐ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ๋ณด์
๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ์ํํ๋ฉฐ ์์ฐ์๋ฅผ ํ์ธํ๊ณ , ์ด๋ฅผ ๋ํ๋ ๋ฐฉ์์ ์ ์ ํ ํด๊ฒฐ์ฑ ์ด์๋ค.
1. my_string.charAt(i)๋ก ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ์ํํ๋ค๋ ์์ด๋์ด๋ ์ฌ๋ฐ๋๋ค.
2. ์์ฐ์๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ๊ฑฐ๋, ์ซ์์ ๋งค์นญ์ ํ์ธํ๋ ค๊ณ ํ๋ค.
3. ์ซ์๋ฅผ ํ์ธํ๋ ค๋ฉด String์์ int๋ก ๋ณํํ๊ฑฐ๋, ์กฐ๊ฑด๋ฌธ์ผ๋ก ์ซ์์ธ์ง ํ๋ณํด์ผ ํ๋ค๊ณ ์๊ฐํ๋ค.
ํ์ง๋ง ์ ๋ ๋ฐฉ์์์ ๊ฐ์ ํ ์ ์๋ ์ ๊ณผ ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ด ์๋ค.
๋ณด์ํด์ผ ํ ์
1. ์ซ์ ํ๋ณ์ ๋ฒ๊ฑฐ๋ก์ ์ ๊ฑฐ
if ๋ฌธ์ผ๋ก “1”์์ “9”๊น์ง ๋งค์นญ์ ํ๋ํ๋ ํ์ธํ๋ ๋์ , Java์ ๋ด์ฅ ๋ฉ์๋๋ ๊ฐ๋จํ ๋ ผ๋ฆฌ๋ก ํด๊ฒฐํ ์ ์๋ค.
• Character.isDigit() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์๊ฐ ์ซ์์ธ์ง ๊ฐ๋จํ ํ์ธํ ์ ์๋ค.
2. ๋ฌธ์ -> ์ซ์ ๋ณํ
• ์ซ์๋ก ๋ณํํ ๋, ๋ฌธ์์์ ‘0’์ ๋นผ๋ฉด ํด๋น ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ ์ ์๋ค. (์: '5' - '0'์ 5๊ฐ ๋๋ค.)
๊ตณ์ด ๋ณต์กํ ํ์ ๋ณํ ์์ด ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
<๋ฌธ์์ ์ซ์์ ๊ด๊ณ>
1. ๋ฌธ์์ ์์คํค ์ฝ๋
์ปดํจํฐ๋ ๋ฌธ์๋ฅผ ์ ์ฅํ ๋ ์์คํค ์ฝ๋๋ผ๋ ์ซ์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค.
์๋ฅผ ๋ค์ด :
๋ฌธ์ '0'์ ์์คํค ๊ฐ์ 48
๋ฌธ์ '1'์ ์์คํค ๊ฐ์ 49
2. ๋ฌธ์์์ '0'์ ๋นผ๋ ์ด์
์ซ์ ๋ฌธ์์ ์์คํค ๊ฐ์์ '0'(์ฆ,48)์ ์์คํค ๊ฐ์ ๋นผ๋ฉด, ํด๋น ์ซ์์ ์ ์ ๊ฐ์ ์ป์ ์ ์๋ค.
์:
'5'- '0' = 53 - 48 = 5
3. ์ค์ ๋ก ์ด๋ป๊ฒ ๋์ํ๋?
์๋ฐ์์ ๋ฌธ์(char)๋ ๋ด๋ถ์ ์ผ๋ก ์ ์ ๊ฐ(์์คํค ๊ฐ)์ผ๋ก ์ฒ๋ฆฌ๋๋ค.
๋ฐ๋ผ์ '5'-'0'๋ ๋ ์์คํค ๊ฐ์ ์ฐจ๋ฅผ ๊ณ์ฐํ ๊ฒฐ๊ณผ๋ก, ์ด๋ฅผ ํตํด ์ซ์๋ฅผ ์ป๋๋ค.
์์ ์ฝ๋๋ก ์ดํด
public class CharToNumberExample {
public static void main(String[] args) {
char c = '5'; //๋ฌธ์'5'
int numericValue = c - '0'; //'5'์ ์์คํค ๊ฐ(53)์์ '0'์ ์์คํค ๊ฐ(48)์ ๋บ
System.out.println("Numberic Value: " + numericValue);
}
}
3. ์ฝ๋ ๊ฐ๊ฒฐํ
• ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ์ ํ์ฉํ๋, ๋ก์ง์ ๊ฐ๋จํ ํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๊ฒ์ด ์ค์ํ๋ค.
Solution ๐ก
public class Solution {
public int solution(String my_string) {
int sum = 0;
// ๋ฌธ์์ด์ ์ํ
for (int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i); //๋ฌธ์์ด์ ๊ฐ ๋ฌธ์ ๊ฐ์ ธ์ค๊ธฐ
// ๋ฌธ์๊ฐ ์ซ์์ธ์ง ํ์ธ
if (Character.isDigit(c)) {
sum += c - '0'; //์ซ์๋ก ๋ณํ ํ ๋์ ํฉ
}
}
return sum; // ์ต์ข
ํฉ ๋ฐํ
}
}
๋ ผ๋ฆฌ์ ํ์ด ๊ณผ์
1. ๋ฌธ์์ด์ ์ํํ๋ค.
for ๋๋ for-each ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๊ฐ ๋ฌธ์๋ฅผ ๋ฐํํ๋ค.
2. ๊ฐ ๋ฌธ์๊ฐ ์ซ์์ธ์ง ํ์ธํ๋ค.
Character.isDigit(char c) ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ซ์์ธ์ง ํ๋ณํ๋ค.
3. ์ซ์์ธ ๊ฒฝ์ฐ ํฉ์ฐํ๋ค.
์ซ์์ธ ๊ฒฝ์ฐ, ํด๋น ๋ฌธ์๋ฅผ ์ซ์๋ก ๋ณํํ์ฌ ๋์ ํฉ์ ๋ํ๋ค.
4. ์ต์ข ํฉ์ ๋ฐํํ๋ค.