Simple Pig Latin

Instructions

Move the first letter of each word to the end of it, then add “ay” to the end of the word. Leave punctuation marks untouched.

Examples

1
2
pigIt('Pig latin is cool'); // igPay atinlay siay oolcay
pigIt('Hello world !'); // elloHay orldway !

My Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Arrays;
import java.util.stream.Collectors;

public class SimplePigLatin {
public static String pigIt(String str) {
return Arrays.stream(str.split(" "))
.map(SimplePigLatin::moveFirstLetterToLast)
.collect(Collectors.joining(" "));

}

public static String moveFirstLetterToLast(String word) {
if (isContainPunctuation(word))
return word;

if (word.length() == 1)
return word + "ay";

return word.substring(1) + word.charAt(0) + "ay";
}

public static boolean isContainPunctuation(String word) {
String[] punctuationArray = {"!", "?"};

long count = Arrays.stream(punctuationArray)
.filter(word::contains)
.count();

return count > 0;
}
}

Better Solution

1
2
3
4
5
public class PigLatin {
public static String pigIt(String str) {
return str.replaceAll("(\\w)(\\w*)", "$2$1ay");
}
}

Feeling

위 같은 코드를 보면 이런걸 해야하나 생각도 들지만 그래도 알면 이렇게 한 줄에 좀더 쉽게 문제를 풀수 있고 또 나중에 쓸 수 도 있기 때문에 배워두는 것도 좋을 것 같다.

그리고 오늘을 끝으로 당분간 매일 알고리즘 문제는 쉬려고 한다.

대신에 자료 구조와 알고리즘에 대해 공부를 하고 난 후에 알고리즘 문제를 통해 문제 해결력을 키워야 할 때 다시 시작하려고 한다.

Share