[백준] 2954번 창영이의 일기장 Java 문제 풀이

2022. 1. 18. 12:24알고리즘/백준

728x90
반응형

문제

창영이는 매일 밤 하루동안 일어난 일을 일기장에 남긴다. 일기장을 쓰면서 영어 공부도 같이 하기 위해서 영어로 일기를 쓴다. 또, 남들이 자신의 일기장을 보는 것을 막기 위해서 모음('a','e','i','o','u')의 다음에 'p'를 하나 쓰고,  그 모음을 하나 더 쓴다.

예를 들어, "kemija" 는 "kepemipijapa"가 되고, "paprika"는 "papapripikapa"가 된다.

창영이가 일기장에 작성한 문장이 하나 주어졌을 때, 원래 문장은 무엇인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 알파벳 소문자와 공백으로만 이루어진 문장이 하나 주어진다. 모든 단어는 공백 하나로 구분되어져 있다. 문장의 길이는 최대 100이다.

출력

첫째 줄에 창영이가 일기장에 작성한 문장을 원래 문장으로 바꾸어 출력한다.


예제입력1

zepelepenapa papapripikapa

예제출력1

zelena paprika


예제입력2

bapas jepe doposapadnapa opovapa kepemipijapa 

예제출력2

bas je dosadna ova kemija


문제풀이

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;

interface Main{
    static void main(String[]a) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str = "";
        str = br.readLine();
        String regex = "([aeiou])p[aeiou]";
        bw.write(str.replaceAll(regex, "$1"));
        bw.flush();
    }
}

apa, epe, ipi, opo, upu인 단어가 있으면 모두 한글자만 출력하면 되는 문제입니다.

 

제가 사용한 정규식은 p 사이에 모음이 있으면 매치되도록 했는데

 

반례로 api, epa 등 서로 다른 모음이 있는 경우에도 매칭이 되는 정규식이지만 정답 처리가 되는 거 보니 반례가 덜 추가된 거 같습니다.

 

import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;

interface Main{
    static void main(String[]a) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        String str = "";
        String[] arr = {"a", "e", "i", "o", "u"};
        str = br.readLine();
        Pattern pattern;
        for(int i=0; i<arr.length; i++) {
          pattern = getPattern(arr[i]);
          Matcher matcher = pattern.matcher(str);
          if(matcher.find()) {
            str = matcher.replaceAll(arr[i]);
          }        
        }
        bw.write(str);
        bw.flush();
    }

    public static Pattern getPattern(String str) {
      return Pattern.compile(String.format("(%s)p(%s)", Pattern.quote(str), Pattern.quote(str)));
    }
}

그냥 이렇게 바꿔봤습니다.. 다른 방법은 잘 안되네요

 

출처 : https://www.acmicpc.net/problem/2954

 

2954번: 창영이의 일기장

창영이는 매일 밤 하루동안 일어난 일을 일기장에 남긴다. 일기장을 쓰면서 영어 공부도 같이 하기 위해서 영어로 일기를 쓴다. 또, 남들이 자신의 일기장을 보는 것을 막기 위해서 모음('a','e','i

www.acmicpc.net

 

728x90
반응형