문제
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
▣ 입력설명
첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
▣ 출력설명
첫 줄에 자연수를 출력합니다.
▣ 입력예제 1
g0en2T0s8eSoft
▣ 출력예제 1
208
풀이
1) 아스키 코드로 푸는 방법
answer = answer * 10 + (숫자 - 48)
위 식을 사용하여 풀면 된다. (* 0의 아스키코드 : 48, 9의 아스키코드: 57)
문자로 연산을 하게 되면 아스키코드로 바뀌어서 계산되기 때문에 (예: 0은 48로 바뀌어 계산됨)
꼭 0의 아스키 코드인 48을 빼준다.
0, x=48: 0 = 0 x 10 + 0
1, x=49: 1 = 0 x 10 + 1
2, x=50: 12= 1 x 10 + 2
0, x=48: 120 = 12 x 10 + 0
5, x=53: 1205 = 120 x 10 + 5
2) Character.isDigit(), Integer.parseInt() 사용
isDigit() 함수로 숫자이면 문자열에 붙이고,
Integer.parseInt() 함수를 사용해서 int로 바꾸면 된다.
0208 처럼 앞에 0이 있어도 208로 변경되므로 아주 간단하게 풀 수 있다.
코드
1) 아스키 코드로 푸는 방법
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
int answer = 0;
for(char c : s.toCharArray()) {
if(c >= 48 && c <= 57) answer = answer * 10 + (c - 48);
}
System.out.print(answer);
}
}
2) 추천! Character.isDitigt(), Integer.parseInt() 사용
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
String answer = "";
for(char c : s.toCharArray()) {
if(Character.isDigit(c)) answer += c; //숫자면 문자열에 붙인다
}
System.out.print(Integer.parseInt(answer)); //int로 변경
}
}
'PS(Java) > 인프런 강의 문제' 카테고리의 다른 글
[PS] 인프런 강의 - 문자열 11. 문자열 압축 (0) | 2022.10.14 |
---|---|
[PS] 인프런 강의 - 문자열 10. 가장 짧은 문자거리 (0) | 2022.10.11 |
[PS] 인프런 강의 - 문자열 8. 유효한 팰린드롬 (0) | 2022.10.11 |
[PS] 인프런 강의 - 문자열 7. 회문 문자열 (0) | 2022.10.11 |
[PS] 인프런 강의 - 문자열 6. 중복 문자 제거 (0) | 2022.10.10 |