본문 바로가기

알고리즘/인프런

섹션 1. String(문자열)_9. 숫자만 추출

문제

  • 문자와 숫자가 섞여있는 문자열이 주어지면 그 중 숫자만 추출하여 그 순서대로 자연수를 만듭니다.
  • 만약 “tge0a1h205er”에서 숫자만 추출하면 0, 1, 2, 0, 5이고 이것을 자연수를 만들면 1205이 됩니다.
  • 추출하여 만들어지는 자연수는 100,000,000을 넘지 않습니다.

입력

  • 첫 줄에 숫자가 섞인 문자열이 주어집니다. 
  • 문자열의 길이는 100을 넘지 않습니다.

출력

  • 첫 줄에 자연수를 출력합니다.

입출력 예제

 

 

풀이 방식은 총 3가지로, 다음과 같다.

1.  replaceAll() 사용

2. 아스키코드 사용

3. isDigit() 사용

1. replaceAll 사용

문자열을 입력받고 메소드를 호출하는 코드를 작성한다.

 

메소드 구현으로 넘어가보자.

결과값을 자연수로 출력해야 하므로 int형으로 변수를 생성한다.

 

입력받은 문자열에 toUpperCase() replaceAll("[^0-9]", "")를 사용하여 숫자만 추출한다.

  • toUpperCase() : 대소문자 구분을 없애기 위해 사용한다.
  • replaceAll("[^0-9]", "") : 0-9까지의 숫자를 제외하고 모두 "" 로 변경한다.

주의할 점은, str은 String 형이기 때문에 int 형인 result에 넣어줄 때에는 Integer.parseInt() 를 사용하여 형변환을 해줘야 한다.

 

수행 결과를 확인한다.


2. 아스키코드 사용

문자열을 입력받고 메소드를 호출하는 코드를 작성한다.

메소드 구현으로 넘어가보자.

 

결과값을 자연수로 출력해야 하므로 int형으로 변수를 생성한다.

 

아스키코드값으로 숫자 0은 48이고, 숫자 9는 57이다.

이를 사용하여 향상된 for문을 통해 각 문자가 숫자인지를 확인한다.

 

아스키코드값이 48보다 크고, 57보다 작으면 숫자이므로 이 때에 아스키코드값을 자연수로 변경하는 식을 수행하도록 한다.

 

수행 결과를 확인한다.


3. isDigit 사용

문자열을 입력받고 메소드를 호출하는 코드를 작성한다.

메소드 구현으로 넘어가보자.

 

이번에는 String 형으로 변수를 선언한다.

 

toCharArray()를 통해서 str에 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성하도록 한다.

  • toCharArray() : 입력된 문자열을 문자 하나씩 분리해서 문자 배열을 생성하도록 한다.

그리고 isDigit() 을 사용하여 codeValue에 들어간 문자가 숫자인지 확인한다.

  • isDigit() : char 값이 숫자인지 여부를 확인하여 true / false를 리턴한다.

 String으로 결과 변수를 선언하였으므로 return 시에 Integer.parseInt() 를 사용하여 int로 형변환 해준다.

 

수행 결과를 확인한다.


 

해당 글은 인프런 > 자바(Java) 알고리즘 문제풀이 : 코딩테스트 대비(김태원)강의를 참고하여 작성하였습니다.