Code Signal -Arcade
코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.
주로 자바 위주로 풀이를 올릴예정이고,
추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...
되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!
Longest Word
가장 긴 단어
이 문제는 주어진 문자열이 있을 때, 각 단어들 중 가장 긴단어를 반환해달라는 것입니다.
하지만, 문제점은 문자열 안에는 특수문자가 들어있는 단어들이 존재합니다. 이러한 특수문자는 제외하고 알파벳 단어만을 봤을 때, 가장 긴 단어를 추출해달라는 문제.
답안을 보겠습니다.
String longestWord(String text) {
Pattern pattern = Pattern.compile("\\w[^_,\\s\\W]{1,}");
Matcher matcher = pattern.matcher(text);
List<String> resultList = new ArrayList<String>();
while(matcher.find()){
resultList.add(matcher.group());
}
System.out.println(resultList);
int maxlength = resultList.get(0).length();
int index = 0;
for(int i =0; i<resultList.size();i++) {
if(resultList.get(i).length() > maxlength){
maxlength = resultList.get(i).length();
index = i ;
}
}
return resultList.get(index);
}
저는 정규식 표현을 통해 문제를 풀이 했습니다.
Pattern.compile()을 활용하였고
정규식은
"\\w[^_,\\s\\W]{1,}"
"\\w[^_,\\s\\W]{1,}" |
||
\w | word 알파벳 및 underscore(_) 가 해당됩니다. | |
[^_,\s\W] | [^..] | ^이하의 것들은 빼라 |
_ , , | _ 얘랑 , 얘 특수문자. | |
\s | 그리고 빈공간들 (space, tabs, linebreaks) |
|
\W | 그리고 not word (알파벳이나 _ 아닌것들 다 해당됨. | |
{1,} | 1번 이상 반복된다. |
이렇게 하면
좌측 사진 처럼 띄어쓰기, 특수문자를 제외한 단어들만 추출이 됩니다.
Matcher matcher = pattern.matcher(text);
matcher를 사용해서 이러한 패턴을 입력된 Text에 적용을 해주면, matcher 안에는 좌측 사진처럼 단어들이 발견되어 있는 것입니다.
다음은 이러한 발견들을 find() 함수를 통해서 리스트화 해줍니다.
while(matcher.find()) resultList.add(matcher.group());
while반복문을 통해서 matcher 의 group함수를 통해 리스트에 추가해줍니다.
System.out.println(resultList); 으로 출력을 하면 , 아래와 같이 출력이 됩니다.
보이시나요? output에 단어들만 리스트화 되어 출력이 됩니다.
이제 간단하게 이중에서 가장 긴단어를 추출해주면 끝입니다.
이제 엘리트 분들의 답안을 감상하자...
JAVA
String longestWord(String text)
{
return Arrays.stream(text.split("\\W+")).max((a, b) -> a.length() - b.length()).get();
}
정규식을 저처럼 직접 단어를 찾는 방법 말고도 이렇게 반대로 빈공간과 특수문자를 찾아서 하는 방법도 있습니다.
훨씬 간단하고 편리한 방법이고, Stream()함수를 활용해서 한번에 깔끔히 가장 긴단어를 추출하는 방법이네요.
split()함수 안에 정규식을 넣어서 한번에 배열로 형성하는것은 진짜 좋은 방법인듯 합니다.
마지막에 get()을 통해 가져오는것도 잘 기억해놔야겠네요.
Python3
def longestWord(text):
return max(re.split('[^a-zA-Z]', text), key=len)
파이썬도 비슷한 방법.
JS
function longestWord(text) {
return text.match(/[A-Za-z]+/g).sort((a,b)=>{return b.length > a.length})[0];
}
js도 비슷한 방법을 사용하면 되네요.
공감 버튼♥ 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!
부탁드려요 돈드는거 아니잖아요~
'Algorithm > Java' 카테고리의 다른 글
#53_Code Signal Arcade >> Valid Time (0) | 2020.07.07 |
---|---|
#51_Code Signal Arcade >> Delete Digit (0) | 2020.07.01 |
#50_Code Signal Arcade >> Chess Knight (0) | 2020.06.28 |