[JAVA] 프로그래머스 - 숨어있는 숫자의 덧셈 (1)
프로그래머스 코딩테스트 연습 입문단계 '숨어있는 숫자의 덧셈(1)' 문제입니다.
https://school.programmers.co.kr/learn/courses/30/lessons/120851
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
❓ 문제 설명
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
※ 아래 입출력 예시를 참고하세요!
⚠️ 제한사항 및 입출력 예시
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
입력 (my_string)
"aAb1B2cC34oOp"
출력 (return 값)
10
// "aAb1B2cC34oOp"안의 한자리 자연수는 1, 2, 3, 4
// 따라서 1 + 2 + 3 + 4 = 10 을 return합니다.
🔍 알고리즘 구상
- charAt() 메서드로 문자열을 자른다
- 자른 문자열을 숫자의 아스키코드 값과 비교한다
- 숫자가 맞다면 '0'을 빼서 원하는 숫자값을 누적한다.
'0'의 아스키코드는 48고 '9'의 아스키코드는 57로 0을 빼면 한 자리 숫자가 나온다.
ex) 문자 '7'을 정수값으로 바꾸고 싶을 때 ▶ '7' - '0' = 55 - 48 = 7
✏️ 직접 구현한 코드
import java.util.*;
class Solution {
public int solution(String my_string) {
int answer = 0;
for(int i = 0; i < my_string.length(); i++) {
char c = my_string.charAt(i);
if((int)c >= 48 && (int)c <= 57)
answer += c-'0';
}
return answer;
}
}
🗣️ 코드 설명
- 문자열안에 숫자값을 찾아 누적할 answer을 생성했습니다.
- 0부터 my_string의 길이보다 작을 때까지 증가하는 i 를 증가값으로 가진 for문을 만듭니다
- for문 안에서는 charAt() 메서드를 이용해 my_string의 i 번째 문자를 c에 저장합니다.
- c에 저장한 뒤 if문을 이용해 그 문자가 숫자인지 알아냅니다. c를 int형으로 강제형변환하면 아스키코드로 변환되는데 이때 이 아스키코드가 숫자의 아스키코드(48~57)이라면 answer에 c에서 '0'을 뺀 값을 누적해 더합니다.
🔥 다른 사람의 코드
1. 그냥 char타입도 비교가 된다
class Solution {
public int solution(String my_string) {
int answer = 0;
for(char c : my_string.toCharArray()){
if(c >= '0' && c <= '9'){
answer += c - '0';
}
}
return answer;
}
}
저는 char타입을 int타입으로 강제형변환해서 비교했는데, char타입은 그냥 비교가 되네요!
그리고 이 분은 for문이 아니라 for each문을 사용했습니다.
2. replaceAll() 사용
class Solution {
public int solution(String my_string) {
int answer = 0;
String str = my_string.replaceAll("[^0-9]","");
for(char ch : str.toCharArray()) {
answer += Character.getNumericValue(ch);
}
return answer;
}
}
이 분은 replaceAll() 메서드를 사용해서 0부터 9가 아니라면 공백으로 채웠습니다.
또 Character 클래스의 getNumericValue() 메서드를 사용해 char타입을 int타입으로 변환시켰네요!!
⭐ 기억하고 넘어갈
- char타입을 그냥 비교할 수 있다
- Character 클래스의 getNumericValue() 메서드 : char타입을 int타입으로 변환한다
// import java.lang.Character
char c = '8';
int num = Character.getNumericValue(c);
// num = 8
Character의 API ▼
Character (Java SE 15 & JDK 15)
All Implemented Interfaces: Serializable, Comparable , Constable public final class Character extends Object implements Serializable, Comparable , Constable The Character class wraps a value of the primitive type char in an object. An object of class Chara
docs.oracle.com