ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [릿코드] 1805. Number of Different Integers in a String
    알고리즘/leetcode 2021. 3. 28. 14:33

    문제 출처

    https://leetcode.com/contest/weekly-contest-234/problems/number-of-different-integers-in-a-string/

     

    문제 설명

    문자열이 하나 주어진다.

    문자열 안에 있는 정수의 갯수를 구하여라.

    중복되는 정수는 하나로 세어라.

     

    문제 풀이

    정규표현식으로 정수처럼 보이는 모든 부분 문자열을 구한다.

    부분 문자열을 정수 형태로 변환하고 Set에 담는다.

    Set의 크기를 구한다.

     

    코드

     

     

    코드 해설

    Pattern pattern = Pattern.compile("[0-9]+");

    정규표현식을 위한 클래스이다. 정수의 패턴은 "[0-9]+"라고 할 수 있다.

     

    Matcher matcher = pattern.matcher(word);

    Matcher는 패턴의 영원한 짝꿍이다. word 속에 있는 "[0-9]+"를 찾아준다.

     

    Set<BigInteger> intSet = new HashSet<>();

    처음에 Set<Integer>로 했는데 아주 긴 정수가 들어올 경우 오버플로우가 발생하여 에러를 봤다.

    그래서 오버플로우 걱정이 없는 Set<BigInteger>로 해결했다.

     

    while (matcher.find())

    matcher의 역할은 word속에 있는 "[0-9]+"를 찾는 것이다. find()는 패턴에 일치하는 부분 문자열이 있는지 true 또는 false로 알려준다.

     

    intSet.add(new BigInteger(matcher.group()));

    matcher.find()는 부분 문자열이 있는지 없는지만 알려준다. 부분 문자열은 matcher.group()으로 알 수 있다. 부분 문자열을 정수 형태로 변환하고 Set에 담는다. 정수 형태로 변환했으므로 앞부분의 "1""01"은 같은 수로 취급된다. Set에 담았으므로 중복은 사라진다.

    댓글

Designed by Tistory.