📌 문제 설명
문자와 숫자가 섞여있는 문자열이 주어지면, 그중 숫자만 추출하여 자연수를 만드는 프로그램을 작성하세요.
- 숫자는 원래 순서를 유지해야 합니다.
- 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.
- 문자열 길이는 최대 100입니다.
📝 입력 & 출력
🔹 입력
- 첫 번째 줄: 문자와 숫자가 섞인 문자열 (최대 길이 100)
🔹 출력
- 첫 번째 줄: 숫자만 추출하여 만든 자연수 출력
🔸 예제 입력 1
g0en2T0s8eSoft
🔸 예제 출력 1
208
💡 해결 방법
- 문자열을 순회하며 숫자만 추출 (Character.isDigit() 활용)
- 숫자를 문자열로 연결한 후 Integer.parseInt()로 변환
- 또는 answer = answer * 10 + (x - '0') 방식으로 변환
💻 코드 구현 (Java)
package partString;
import java.util.*;
public class Problem9 {
public int solution(String s) {
String answer = "";
for (char x : s.toCharArray()) {
if (Character.isDigit(x)) answer += x;
}
return Integer.parseInt(answer);
}
public static void main(String[] args) {
Problem9 T = new Problem9();
Scanner kb = new Scanner(System.in);
String s = kb.next();
System.out.println(T.solution(s));
kb.close();
}
}
📖 코드 설명
1️⃣ Character.isDigit()를 활용한 숫자 추출
for (char x : s.toCharArray()) {
if (Character.isDigit(x)) answer += x;
}
- Character.isDigit(x) → 해당 문자가 숫자인지 확인
- 숫자인 경우 answer 문자열에 추가
- 최종적으로 Integer.parseInt(answer)를 사용하여 정수 변환
2️⃣ answer = answer * 10 + (x - '0') 방식
public int solution(String s) {
int answer = 0;
for (char x : s.toCharArray()) {
// 아스키코드 0(48) ~ 9(57)
if(48<=x && x<=57) answer = answer*10 + (x-48);
}
return answer;
}
- ✅ 문자열을 생성하지 않고, 바로 숫자로 변환
- x - '0' → 문자를 숫자로 변환하는 가장 효율적인 방법
- answer * 10 + (x - '0') → 자릿수를 확장하며 숫자를 생성
- ❗ 메모리 사용량이 줄어들고, 속도가 더 빠름
⏳ 시간 복잡도 분석
- O(n) (n: 문자열 길이)
- 문자열을 한 번 순회하면서 숫자를 추출하므로 선형 시간 복잡도를 가짐.
출처: 인프런 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비
자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 강의 | 김태원 - 인프런
김태원 | , 자바(Java) 알고리즘 문제풀이 채점사이트를 통해 기초부터 준비해보세요! 💪 [사진] 이 강의는 [사진] 자바(Java)로 코딩테스트 준비를 하고 계신 분께 추천드려요! 문제는 기초~ 중급
www.inflearn.com
'코딩테스트 > 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비' 카테고리의 다른 글
| 섹션 1. 문자열 - 11. 문자열 압축 (0) | 2025.03.18 |
|---|---|
| 섹션1. 문자열 - 10. 가장 짧은 문자 거리 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 8. 유효한 팰린드롬 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 7. 회문 문자열 (0) | 2025.03.18 |
| 섹션 1. 문자열 - 6. 중복 문자 제거 (0) | 2025.03.18 |