창영이의 일기장 성공
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
1 초 | 128 MB | 952 | 640 | 587 | 69.059% |
문제
창영이는 매일 밤 하루동안 일어난 일을 일기장에 남긴다. 일기장을 쓰면서 영어 공부도 같이 하기 위해서 영어로 일기를 쓴다. 또, 남들이 자신의 일기장을 보는 것을 막기 위해서 모음('a','e','i','o','u')의 다음에 'p'를 하나 쓰고, 그 모음을 하나 더 쓴다.
예를 들어, "kemija" 는 "kepemipijapa"가 되고, "paprika"는 "papapripikapa"가 된다.
창영이가 일기장에 작성한 문장이 하나 주어졌을 때, 원래 문장은 무엇인지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 알파벳 소문자와 공백으로만 이루어진 문장이 하나 주어진다. 모든 단어는 공백 하나로 구분되어져 있다. 문장의 길이는 최대 100이다.
출력
첫째 줄에 창영이가 일기장에 작성한 문장을 원래 문장으로 바꾸어 출력한다.
예제 입력 1
zepelepenapa papapripikapa
예제 출력 1
zelena paprika
출처
Contest > Croatian Open Competition in Informatics > COCI 2008/2009 > Contest #3 2번
- 문제를 번역한 사람: baekjoon
- 문제의 오타를 찾은 사람: colibrishin
풀이 :
하나의 문장을 단어로 먼저 끊어낸다.
=> zepelepenapa|papapripikapa
끊어낸 단어를 다시 글자별로 쪼갠다.
=> z/e/p/e/l/e/p/e/n/a/p/a|p/a/p/a/p/r/i/p/i/k/a/p/a
차례대로 for문을 돌려서 모음이 나올 시 그 다음칸과 다다음칸을 공백으로 처리한다.
=> z/e/ / /l/e/ / /n/a/ / |p/a/ / /p/r/i/ / /k/a/ /
공백을 제거한다
=> z/e/l/e/n/a|p/a/p/r/i/k/a
이어 붙인 뒤 문장으로 만든다.
=> zelena paprika
다음과 같은 코드로 구현이 가능하다.
import java.util.Scanner; public class Main { static class Solution{ char [] vowels = {'a','e','i','o','u'}; // 검색할 모음을 준비한다. String [] words; // 문장을 단어로 끊어 담을 배열 String temp; // 임시 저장공간 String decoded; // 완성된 단어들을 다시 문장으로 만들때 이용할 공간. char [] aWord; //나눠진 String을 다시 글자별로 나눌 배열 Solution(String args){ words = args.split(" "); // 생성자 생성과 동시에 문장을 받아서 split을 이용해 글자를 나눈다. decoded = ""; // 해독한 글자를 완성하기 위해서 미리 공간을 할당해준다. } void decoder () { // 실질적인 해독기 메서드이다. for (int i = 0; i < words.length; i++) { // 각 단어들을 하나씩 돌아가면서 aWord = words[i].toCharArray(); // 이 단어들을 다시 글자별로 나눈다. temp = ""; // 단어가 하나씩 새로 시작할때마다 임시공간은 초기화를 해 주어야 한다. for (int j = 0; j < aWord.length; j++) { //나눠진 글자들을 한개씩 돌아가면서 for (int k = 0; k < vowels.length; k++) { //준비해둔 모음쌍과 비교하여 if(vowels[k] == aWord[j]){ aWord[j+1] = ' '; aWord[j+2] = ' '; // 모음이 검색되면 그 다음글자 p와 그 다음글자 모음을 공백으로 처리한다. } } temp += (aWord[j]);; //공백으로 처리한 공간을 포함해서 하나의 String공간에 묶는다 } temp = temp.replaceAll(" ",""); // 완성된 단어에서 공백을 모두 제거해준다. if( i != 0) { decoded += " "; } decoded += temp; //공백이 제거된 단어를 차례대로 해독된 결과물에 " "를 넣어서 완성해준다. } } String getDecoded() { //완성 된 글자를 받아오는 코드. return decoded; } } public static void main(String[] args) { // 실행 코드. Solution solution; Scanner s = new Scanner(System.in); String a = s.nextLine(); solution = new Solution(a); solution.decoder(); System.out.println(solution.getDecoded()); } }
'Program > 알고리즘' 카테고리의 다른 글
2530번 인공지능 시계 (0) | 2018.11.11 |
---|---|
4963번 섬의 개수 (0) | 2018.11.06 |
[백준 알고리즘] 10828번 스택 문제풀이와 설명 (0) | 2018.10.25 |