주어진 문제는 간단했다.
입력받은 문자열에 숫자가 있으면, 숫자만 추출해 순서대로 자연수를 만들어서 출력하는 문제였다.
// ex) g0en2T0s8eSoft -> 0, 2, 0, 8 == 208
이 문제를 어떻게 접근 할 것인가?에 대해 생각해보았고,
// 나는 어떻게 접근할 것인가? -> 문자열 입력받고, 문자열의 길이만큼 반복을 통해 숫자와 문자를 필터->
// 그리고 숫자를 배열에 저장-> 배열 반환? (그럼 숫자와 문자를 어떻게 필터할건데? -> '아스키코드' 이용)
이렇게 생각을 했다.
내가 앞서 생각한 방식
int answer = 0;
for(int i =0; i<s.length(); i++){
char a = s.charAt(i);
if((int)a >57 || (int)a <47)
// 이렇게 if문을 사용하지 않고도 isDigit()메소드 사용 가능함
continue;
else
// 이 부분이 핵심이 될 듯? -> 기존에 생각 했던 부분은 그냥 문자를 계속 더해주는 것... -> (실패)
answer = answer*10+((int)a-48);
}
return answer;
1) 간단하게 설명하자면 입력받은 문자열에 대해 길이만큼 반복문을 실행한다.
2) 문자열을 하나하나 문자로 쪼갠다 (charAt) 사용
3) 이 쪼갠 문자를 아스키코드를 이용해 숫자인지 아닌지 조건문을 통해 확인한다.
(아스키코드로 숫자는 48~57[0-9]까지)
4) 이 문자가 숫자라면 계산식을 이용해 숫자를 더해준다
for문을 향상된 for문으로 바꿀 수 있다
for(char i : s.toCharArray()){
.. 조건식
}
if문을 아래와 같이 바꾸고, 로직을 짤 수 있다.
바로 isdigit() 메소드를 사용하는 것이다.
이 메소드는 입력값이 숫자인지 아닌지를 판별하는 메소드 (return 값이 True - False)이다.
* isDigit()메소드로 if문을 교체할 수 있다*
여기서 answer는 int가 아니라 String으로 와야한다.
for(char x : s.toCharArray()){
if(Character.isDigit(x)) answer+=x;
}return Integer.answer;
* * */
'알고리즘 및 자료구조' 카테고리의 다른 글
문자열(String)을 이용한 문제 풀이 (3문제) (0) | 2022.12.01 |
---|---|
String(문자열)문제에서 찾은 StringBuilder (0) | 2022.01.20 |