본문 바로가기
PS/BOJ

백준 5637 자바 - 가장 긴 단어 (BOJ 5637 JAVA)

by Nahwasa 2021. 11. 10.

문제 : https://www.acmicpc.net/problem/5637

코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/05600/BOJ_5637.java

 

  생각상으로는 그냥 공백이나 줄바꿈('\n')을 기준으로 나누면 될 것 같지만, '단어는 알파벳(a-z, A-Z)과 하이픈(-)으로만' 라는 기준에 따라 '마침표, 숫자, 심볼, 등등등...' 이라고 써져있는 것도 단어로 취급하면 안된다!

즉, '15-16 November 2012.' 라는 문장의 경우 여기서 단어는 '-', 'November'의 두가지 뿐이다.

 

  따라서 단순히 자바의 StringTokenizer나 split으로 공백을 기준으로 나눠서는 처리할 수 없다. 방법이 두가지로 나뉘는데, 하나는 한줄씩 입력받아서 직접 character를 확인하면서 알파벳과 하이픈이 아닌 문자를 만나면 리턴하는 식으로 직접 split을 구현하는 것이고, 다른 하나는 정규식을 사용하면 된다.

 

  내 경우엔 정규식을 사용했다. 편하게 하려고 입력 받은 모든 문자열을 일단 모두 소문자로 변경하고 'String[] split = s.toLowerCase().split("[^a-z-]");' 와 같이 정규표현식을 사용해 split했다. 그럼 split된 결과는 연속된 알파벳 혹은 하이픈으로 이뤄진 String들이 되므로, 이 중 가장 길이가 긴 것을 찾으면 된다.

댓글