입력 wwq02qweqew21e03
출력 022103 이 아닌 22103 을 추출
💡 생각했던 것들.
얼마전에 replacAll을 배워서 금방 생각해 낼 수 있었다.
문자를 쭉 받고 만약 앞에 0이 있는 경우는 없어지게 해야 했는데
replaceAll 로 숫자 이외의 모든 값들을 없앤후에 정수로 치환하면 앞의 0 은 자연스럽게 없어질꺼라고 생각했다.
그런데 한참 고생했다.
그 이유는
replaceAll 의 코드가 제 역할을 안해줬기 때문이다.
replaceAll("^0-9","") 이 코드가 작동을 안했다.
replaceAll("[^0-9]","") 이렇게 써줬어야 했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public Integer solution(String str) {
int answer=0;
str=str.toUpperCase();
String temp = str.replaceAll("[^0-9]","");
Integer a = Integer.parseInt(temp);
answer = a;
return answer;
}
public static void main(String args[]) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
💡강사님 풀이
아스키 코드 "0~9" "A~Z" "a-z" 정도는 외워둬라 !!
0~9의 아스키코드 48~57
A~Z의 아스키코드 65~90
a~z의 아스키코드 97~122
48 65 97
숫자는 10개
알파벳은 35개 를 인지하면
48 65 97만 외우면 된다.
강사님 풀이 보면 엄청 기발하시고 매번 새롭다.
받은 문자열을 문자배열로 나열하고
그 각각의 문자 아스키코드의 값을 이용하는 것이다.
어차피 숫자만 필요하니까 아스키코드 48~57 사이의 값을 이용하면 되고
그 값중에서 처음 들어온 값을 받아서 아스키코드 48을 빼면 해당 숫자가 나온다(0부터 9까지이므로)
여기서 한번 값을 받고나면 그 다음에 숫자가 들어온다면 그전에 받은 값은 10의자리로 올라갈것이다
따라서 그전에 받은값*10 + (이번에 받은 문자열 아스키코드- 48) 을 통해서 계산하는 것이다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public int solution(String str) {
int answer=0;
char[] a = str.toCharArray();
for(char x: a) {
if(48<=x&&x<=57) {
answer=answer*10+(x-48);
}
}
return answer;
}
public static void main(String args[]) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
💡강사님 풀이2
Character 라는 클래스에 isDigit(x) 이라는 메소드가 있는데
이게 참이면 숫자인 것이다.
이 함수를 이용해서 다음과 같이 할 수있다.
숫자인 경우에 answer이라는 문자열에 계속 추가시켜주고
맨 마지막 리턴할 때 int로 형변환만 해주면 동일하게 작동한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public int solution(String str) {
String answer="";
char[] a = str.toCharArray();
for(char x : a) {
if(Character.isDigit(x)) answer+=x;
}
return Integer.parseInt(answer);
}
public static void main(String args[]) throws IOException {
Main T = new Main();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(T.solution(str));
}
}
코테 관련해서 많이 부담스러웠는데 강의를 통해 푸는 방법들을 배우니 이 시간이 즐겁습니다.
진짜 기능하나하나 다양한 방법으로 잘 가르쳐주십니다.
출처 : 자바(Java) 알고리즘 문제풀이 입문: 코딩테스트 대비 대시보드 - 인프런 | 강의 (inflearn.com)
'알고리즘 > Java 코딩 테스트 준비' 카테고리의 다른 글
[Java] 문자열 내 연속된 문자 Counting 압축 (0) | 2023.01.29 |
---|---|
[Java] 특정 문자와 가장 짧은 거리 배열로 출력하기 (0) | 2023.01.28 |
[Java] 앞뒤로 읽을 때 같은 문자(특수 문자 제거 후 읽기=>정규식 활용) (0) | 2023.01.25 |
[java] 회문(앞에서 뒤에서 읽을 때 같은 문자) 문자열 풀기 (0) | 2023.01.24 |
[Java] 특정 조건에 부합되는 문자 뒤집기(알파벳만 위치 바꾸기) (0) | 2023.01.23 |
댓글