728x90
숫자만 추출
설명
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
입력
첫 줄에 숫자가 섞인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
출력
첫 줄에 자연수를 출력합니다.
예시 입력
g0en2T0s8eSoft
예시 출력
208
풀이
풀이 방법은 2가지이다.
다음은 첫 번째 풀이이다. char 도 결국 정수형임을 이용했다.
1. 입력받은 문자열을 문자로 바꾸어 반복문을 돈다.
2. 해당 문자가 48(즉, char '0')보다 크고, 57(즉, char '9')보다 작으면 정답 값을 누적한다.
다음은 두 번째 풀이이다. Character 클래스의 isDigit()과 StringBuilder를 이용했다.
1. 입력받은 문자열을 문자로 바꾸어 반복문을 돈다. 이 때 String 클래스의 toCharArray()를 이용한다.
2. 해당 문자가 숫자이면 StringBuilder로 해당 문자를 추가한다. 문자가 숫자인지 검증하는 것은 Character 클래스의 isDigit()을 이용했다.
3. 정답이 0123 과 같이 나온 경우, 앞의 0을 제거하기 위해 Integer 클래스의 parseInt() 를 이용한다.
코드
첫 번째 풀이
package solve;
import java.util.Scanner;
public class Main_1_9 {
// char 도 정수형이다
public int solution(String str) {
int answer = 0;
for(char x : str.toCharArray()) {
if (x >= 48 && x <= 57) { // char 에서 x >= 48 && x <= 57 이면 숫자이다, 48 => 0, 57 => 9
answer = answer * 10 + (x-48); // 숫자이면 answer 에 값을 누적한다
}
}
return answer;
}
public static void main(String[] args) {
Main_1_9 T = new Main_1_9();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(T.solution(str));
}
}
두 번째 풀이
package solve;
import java.util.Scanner;
public class Main_1_9_my {
public int solution(String str) {
int answer = 0;
StringBuilder sb = new StringBuilder();
char [] cArr = str.toCharArray();
for(char c : cArr) {
if (Character.isDigit(c)) {
sb.append(c);
}
}
answer = Integer.parseInt(sb.toString()); // 0208 -> 208
return answer;
}
public static void main(String[] args) {
Main_1_9_my T = new Main_1_9_my();
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
System.out.println(T.solution(str));
}
}
728x90
'Coding Test Inflearn' 카테고리의 다른 글
[String] 문자열 압축 (2) | 2024.01.30 |
---|---|
[String] 가장 짧은 문자거리 (2) | 2024.01.30 |
[String] 유효한 팰린드롬 (0) | 2024.01.28 |
[String] 회문 문자열 (2) | 2024.01.28 |
[String] 중복 문자 제거 (0) | 2024.01.27 |