🗣️ 메모
⭕️ 치기 위해서 푸는 중
✏️ [숨어 있는 숫자의 덧셈]
문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
입출력 예
my_string | result |
"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합니다.
유의사항
- 연속된 숫자도 각각 한 자리 숫자로 취급합니다.
🔥 TRY #1
👉🏻 문자열을 차례대로 char 배열에 넣음
👉🏻 각각의 index값을 아스키코드로 변환하면 숫자가 나오겠지?
import java.util.Arrays;
class Solution {
public int solution(String my_string) {
int answer = 0;
char[] arr = new char[my_string.length()];
for(int i = 0; i < my_string.length(); i++) {
arr[i] = my_string.charAt(i);
}
for(int j = 0; j < arr.length; j++) {
System.out.println((int)arr[j]);
}
return answer;
}
}
🔥 TRY #2
👉🏻 어차피 숫자는 1자리 수 0~9까지는 48~57이니까 int형으로 형 변환 한 숫자가 57 미만이면 그것은 숫자임
👉🏻 걔네만 arr에 넣어 주면 되겠지?
import java.util.Arrays;
class Solution {
public int solution(String my_string) {
int answer = 0;
char[] arr = new char[my_string.length()];
for(int i = 0; i < my_string.length(); i++) {
arr[i] = my_string.charAt(i);
}
for(int j = 0; j < arr.length; j++) {
System.out.print((int)arr[j] + " ");
System.out.print(arr[j] + " / ");
if((int)arr[j] <= 57) {
answer += arr[j];
}
}
return answer;
}
}
👉🏻 잘 뽑히긴 한 것 같은데 내가 원하는 숫자가 아닌 int형으로 형 변환 한 49, 50, 51, 52가 들어감
👉🏻 혹시 int로 형 변환 했으니까 다시 char로 형 변환 해 줘야 하나? 싶어 answer += (char)arr[j]로도 시도해 봤지만 어림없었음
🔥 TRY #3
👉🏻 int로 한번 변환한 배열은 자동으로 바뀌어서 들어가나? 싶어서 새로운 배열을 깊은 복사 한 후에 진행해 보기로 함
import java.util.Arrays;
class Solution {
public int solution(String my_string) {
int answer = 0;
char[] arr = new char[my_string.length()];
for(int i = 0; i < my_string.length(); i++) {
arr[i] = my_string.charAt(i);
}
char[] copyArr = new char[arr.length];
copyArr = arr.clone();
// for(int j = 0; j < arr.length; j++) {
// System.out.print((int)arr[j] + " ");
// System.out.print(arr[j] + " / ");
// if((int)arr[j] <= 57) {
// answer += arr[j];
// }
// }
for(int j = 0; j < copyArr.length; j++) {
// System.out.print(copyArr[j] + " ");
// System.out.print((int)arr[j] + " ");
if((int)arr[j] <= 57) {
System.out.print(copyArr[j] + " "); // 여기서는 잘 뽑히는데
answer += copyArr[j]; // 값을 넣을 때는
System.out.print(answer + " "); // int형으로 들어간다...?
}
}
return answer;
}
}
👉🏻 똑같다 왜지...?
🎉🎊💫✨⚡️⭐️🌟 [실행 결과]
코드 블록
출처: 프로그래머스 코딩 테스트 연습,https://school.programmers.co.kr/learn/challenges
코딩테스트 연습 | 프로그래머스 스쿨
개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!
school.programmers.co.kr