> 개발-IT-인터넷/> JAVA

[해커랭크(HackerRank) JAVA 풀이] - Java Regex 2 - Duplicate Words

jini:) 2023. 9. 19. 09:03
728x90
반응형
해커랭크 - https://www.hackerrank.com/
Prepare > Java > Strings > Java Regex 2 - Duplicate Words
 

HackerRank

HackerRank is the market-leading technical assessment and remote interview solution for hiring developers. Learn how to hire technical talent from anywhere!

www.hackerrank.com

 

이 챌린지에서는 정규식(RegEx)을 사용하여 두 번 이상 반복되는 단어의 인스턴스를 제거하지만 대소문자를 구분하지 않고 반복되는 단어의 첫 번째 항목은 유지합니다. 예를 들어, I love Love to To tO code 라는 문장에서 love와 to라는 단어가 반복됩니다. I love Love to To tO code 를 I love to code로 바꾸도록 에디터에서 코드를 완성하세요.

 

이 문제를 해결하려면 다음 세 줄을 완성하십시오.

  1. 반복되는 단어와 일치하는 RegEx를 작성하십시오.
  2. 컴파일된 RegEx가 대소문자를 구분하지 않도록 두 번째 컴파일 인수를 완료합니다.
  3. 반복되는 각 단어가 문장에서 발견된 맨 처음 단어로 대체되도록 replaceAll에 필요한 두 가지 인수를 작성하세요. 예상되는 출력은 대소문자를 구분하므로 단어의 정확한 첫 번째 항목이어야 합니다.

Note: 이 챌린지는 사용자 지정 검사기를 사용합니다. 주석에서 완료하도록 지시하는 세 위치 이외의 항목을 수정하면 챌린지가 실패합니다. 편집기의 원래 스텁 코드를 복원하려면 편집기의 왼쪽 상단에 있는 분기 아이콘을 클릭하여 새 버퍼를 만듭니다.

 

Input Format

주어진 스텁 코드에 대해 다음 입력이 처리됩니다.

  • 첫 번째 줄에는 문장 수를 나타내는 정수 n이 있습니다.
  • n개의 후속 줄 각각은 영문자와 공백 문자로 구성된 단일 문장을 포함합니다.

 

Constraints

  • 각 문장은 최대 10⁴ 영문 알파벳 문자와 공백으로 구성됩니다.
  • 1 ≤ n ≤ 100

 

Output Format

편집기의 스텁 코드는 replaceAll 행에 의해 수정된 문장을 stdout에 출력합니다. 수정된 문자열은 각 단어의 반복 발생이 모두 제거된 초기 문장의 수정된 버전이어야 합니다.

 

 

Sample Input

5
Goodbye bye bye world world world
Sam went went to to to his business
Reya is is the the best player in eye eye game
in inthe
Hello hello Ab aB

 

Sample Output

Goodbye bye world
Sam went to his business
Reya is the best player in eye game
in inthe
Hello Ab

 

Explanation

  1. Goodbye bye world를 얻기 위해 bye bye의 두 번째 발생과 world의 두 번째 및 세 번째 발생을 제거합니다.
  2. Sam went to his business를 얻기 위해 두 번째 went와 to의 두 번째 및 세 번째 발생을 제거합니다.
  3. Reya is the best player in eye game를 얻기 위해 is의 두 번째 발생, the의 두 번째 발생, eye의 두 번째 발생을 제거합니다.
  4. in inthe 문장은 반복되는 단어가 없으므로 수정하지 않습니다.
  5. Hello Hello Ab ab에서 두 번째 ab를 제거하여 Hello Ab를 얻습니다. 
    일치 항목은 대소문자를 구분하지 않으며 최종 문자열에서 일치하는 단어의 첫 번째 항목을 특별히 유지했습니다.

 

 

Code 

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DuplicateWords {

    public static void main(String[] args) {

        String regex = "\\b(\\w+)(\\W+\\1\\b)+";
        Pattern p = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Scanner in = new Scanner(System.in);
        int numSentences = Integer.parseInt(in.nextLine());
        
        while (numSentences-- > 0) {
            String input = in.nextLine();
            
            Matcher m = p.matcher(input);
            
            // Check for subsequences of input that match the compiled pattern
            while (m.find()) {
                input = input.replaceAll(m.group(), m.group(1));
            }
            
            // Prints the modified sentence.
            System.out.println(input);
        }
        
        in.close();
    }
}

 

 

참고

자바 정규식 (Java RegExp) 정규표현식 사용법

 

자바 정규식 (Java RegExp) 정규표현식 사용법

[해커랭크(HackerRank) JAVA 풀이] - Java Regex 이전 글에서 해커랭크 문제를 풀다가, 자바 정규식에 대해 좀 더 알아볼 필요성을 느꼈다. 자바 정규표현식 사용법에 대해 자세히 알아보자. 정규표현식

ji-ni.tistory.com

 

 

 

개인 공부를 위한 포스팅입니다.
모든 번역, 코드는 완벽하지 않을 수 있습니다.

 

 

 

728x90
반응형