ㅁ 문제
문자열 my_string이 매개변수로 주어집니다. my_string안의 모든 자연수들의 합을 return하도록 solution 함수를 완성해주세요.
ㅁ 제한사항
- 1 ≤ my_string의 길이 ≤ 1,000
- my_string은 소문자, 대문자 그리고 한자리 자연수로만 구성되어있습니다.
ㅁ 입출력 예
ㅁ 풀이
class Solution {
public int solution(String my_string) {
char[] cc = my_string.toCharArray();
int sum = 0;
for(int i=0; i<cc.length; i++){
if( (cc[i] >= 65 && cc[i] <=90) || (cc[i] >= 97 && cc[i] <= 122) ){
}else{
sum += Integer.parseInt(String.valueOf(cc[i]));
}
}
return sum;
}
}
- 문자열 my_string이 소문자, 대문자, 한자리 자연수로만 이루어져 있어서 아스키코드값으로 a~z, A~Z에 해당하지 않으면 전부 더해서 return하게 했다.
- 문제는 String을 char로 바꾸었는데, 모든 자연수의 합을 return해야함.
Integer.parseInt를 쓰려면 인자값으로 String만 와야 한다.
그래서 char형을 String.valueOf()로 String으로 바꿨다.
※ 유니코드 값 대신 문자 리터럴을 사용
if (cc[i] >= 65 && cc[i] <= 90) || (cc[i] >= 97 && cc[i] <= 122)
if ((cc[i] >= 'A' && cc[i] <= 'Z') || (cc[i] >= 'a' && cc[i] <= 'z'))
- if의 조건문 안에 유니코드 값을 쓰지 않고 문자 리터럴을 주면 편하고 더 직관적이다.
ㅁ 다른 풀이 (Integer.parseInt 메소드 미사용)
class Solution {
public int solution(String my_string) {
char[] cc = my_string.toCharArray();
int sum = 0;
for (int i = 0; i < cc.length; i++) {
if (cc[i] >= '0' && cc[i] <= '9') { // 숫자인지 확인
sum += cc[i] - '0'; // '0'을 빼서 char를 숫자로 변환
}
}
return sum;
}
}
- cc[i] - '0': 문자에서 '0'의 ASCII 값을 빼면 실제 숫자가 됩니다. 예를 들어, '5' - '0'은 5가 됩니다.
- 문자 '5'가 있을 때, 이 문자의 유니코드 값은 53입니다. 여기서 '0'의 유니코드 값인 48을 빼면, 실제 숫자인 5가 됩니다.
- '0'의 유니코드 값은 48입니다.
- '1'의 유니코드 값은 49입니다.
- '9'의 유니코드 값은 57입니다.
ㅁ 다른 풀이 ( Character.isLetter() & Character.isDigit() 메서드 사용 )
- Java에서 문자열을 다룰 때 종종 특정 문자가 알파벳인지 숫자인지 여부를 판별해야 할 때가 있다.
이를 위해 자바는 유용한 메서드로 isLetter 메서드와 isDigit 메서드를 제공한다.
- 둘 다 Character 클래스에 정의되어 있다.
(1) isLetter 메소드
Character.isLetter(char ch);
- isLetter() 메서드는 특정 문자가 알파벳인지를 판별하여 true 또는 false를 반환한다.
char ch = 'A';
boolean isAlpha = Character.isLetter(ch);
System.out.println(isAlpha); // true
(2) isDigit 메소드
Character.isDigit(char ch);
- isDigit() 메서드는 특정 문자가 0부터 9까지의 숫자인지를 판별하여 true 또는 false를 반환합니다.
char ch = '5';
boolean isNumeric = Character.isDigit(ch);
System.out.println(isNumeric); // true
class Solution {
public int solution(String my_string) {
char[] cc = my_string.toCharArray();
int sum = 0;
for(int i=0; i<cc.length; i++){
if(Character.isDigit(cc[i])){
sum += cc[i];
}
}
return sum;
}
}
- 이렇게는 안 됨.
cc[i]는 char 값이며, 이 값은 숫자일 경우에도 ASCII 코드 값이다.
따라서 sum += cc[i];는 실제 숫자를 더하는 것이 아니라 문자 '0'(48)부터 '9'(57)의 ASCII 코드 값을 더하는 것이 된다.
class Solution {
public int solution(String my_string) {
char[] cc = my_string.toCharArray();
int sum = 0;
for(int i=0; i<cc.length; i++){
if(Character.isDigit(cc[i])){
sum += cc[i] - '0';
}
}
return sum;
}
}
- cc[i]의 아스키코드값이 아닌 실제 숫자값을 구하기 위해서 0을 뺄 때도, 그냥 0이아니라 문자 '0'을 빼야 한다.
'코딩테스트 > 프로그래머스 Lv.0' 카테고리의 다른 글
[문제] n의 배수 고르기 (0) | 2024.10.10 |
---|---|
[문제] 대문자와 소문자 (0) | 2024.10.10 |
[문제] 문자 반복 출력하기 (0) | 2024.10.10 |
[문제] 짝수는 싫어요 (0) | 2024.10.10 |
[문제] 중앙값 구하기 (1) | 2024.10.09 |