티스토리 뷰
반응형
문제
문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
입력
첫 줄에 숫자가 썩인 문자열이 주어집니다. 문자열의 길이는 100을 넘지 않습니다.
출력
첫 줄에 자연수를 출력합니다.
예시 입력
g0en2T0s8eSoft
예시 출력
208
문제 풀이
[첫번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
input = input.replaceAll("[^0-9]", "");
System.out.println(Integer.parseInt(input) * 1);
}
}
(Time 156ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public int Solution(String str) {
str = str.replaceAll("[^0-9]", "");
return Integer.parseInt(str) * 1;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 156ms / Memory 27MB)
[두번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String result = "";
for (char c : input.toCharArray()) {
if (Character.isDigit(c)) {
result += c;
}
}
System.out.println(Integer.parseInt(result) * 1);
}
}
(Time 166ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public int Solution(String str) {
String result = "";
for (char c : str.toCharArray()) {
if (Character.isDigit(c)) {
result += c;
}
}
return Integer.parseInt(result) * 1;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 162ms / Memory 27MB)
[세번째 풀이]
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String result = "";
for (char c : input.toCharArray()) {
if (c >= 48 && c <= 57) {
result += c;
}
}
System.out.println(Integer.parseInt(result) * 1);
}
}
(Time 153ms / Memory 27MB)
import java.util.Scanner;
public class Main {
public int Solution(String str) {
String result = "";
for (char c : str.toCharArray()) {
if (c >= 48 && c <= 57) {
result += c;
}
}
return Integer.parseInt(result) * 1;
}
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
Main main = new Main();
System.out.println(main.Solution(input));
}
}
(Time 159ms / Memory 27MB)
- 첫번째 풀이는 숫자 정규식을 이용해 숫자가 아닌 경우 빈값으로 치환하여 1을 곱해 자연수로 출력했다.
- 두번째 풀이는 Character의 isDigit 메소드를 이용해 숫자를 판단하는 방법을 사용했다.
- 세번째 풀이는 아스키코드를 이용해 숫자에 해당하는 48~57번에 해당하면 숫자로 판단하는 방법을 사용했다.
- Character의 isDigit 메소드를 이용하는 방법 보다는 아스키코드를 이용한 방법이 시간 단축에 더 도움이 되는 듯 하다.
반응형
'Java > Coding Test' 카테고리의 다른 글
[코딩테스트] 문자열 압축 (0) | 2022.02.27 |
---|---|
[코딩테스트] 가장 짧은 문자거리 (0) | 2022.02.27 |
[코딩테스트] 유효한 팰린드롬 (0) | 2022.02.27 |
[코딩테스트] 회문 문자열 (0) | 2022.02.27 |
[코딩테스트] 중복문자제거 (0) | 2022.02.25 |