문제 : 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들이 되므로, 이 중 가장 길이가 긴 것을 찾으면 된다.
'PS > BOJ' 카테고리의 다른 글
백준 2437 자바 - 저울 (BOJ 2437 JAVA) (0) | 2021.11.12 |
---|---|
백준 1010 자바 - 다리 놓기 (BOJ 1010 JAVA) (0) | 2021.11.11 |
백준 13717 자바 - 포켓몬 GO (BOJ 13717 JAVA) (0) | 2021.11.10 |
백준 1068 자바 - 트리 (BOJ 1068 JAVA) (0) | 2021.11.09 |
백준 13711 자바 - LCS 4 (BOJ 13711 JAVA) (0) | 2021.11.09 |
댓글