5637번: 가장 긴 단어
단어는 알파벳(a-z, A-Z)과 하이픈(-)으로만 이루어져 있다. 단어와 다른 문자(마침표, 숫자, 심볼, 등등등...)로 이루어진 글이 주어졌을 때, 가장 긴 단어를 구하는 프로그램을 작성하시오. Apple의
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String answer = "";
int max = Integer.MIN_VALUE;
outer:
while(true) {
String[] arr = br.readLine().trim().split(" "); // 앞뒤 공백 제거 후 나눠서 배열에 저장
for (int i = 0; i < arr.length; i++) {
arr[i] = arr[i].replaceAll("[^a-zA-Z-]", " ").trim(); // 정규표현식 사용하여 a-z,A-Z,-는 모두 공백으로 변경 후 앞뒤 공백 제거
String[] temp = arr[i].split(" "); // 변경된 문자열을 공백 기준으로 나눠서 저장
for(int j = 0; j < temp.length; j++) {
if(temp[j].equals("E-N-D")) break outer; // E-N-D 일 경우 종료시키기
if (max < temp[j].length()) { // 최댓값 갱신 및 가장 긴 단어 저장
max = temp[j].length();
answer = temp[j];
}
}
}
}
System.out.println(answer.toLowerCase()); // 소문자로 출력
}
}
느낀 점 및 정리✍️
1. 첫 제출에서 틀렸다고 나와서 문제 다시 읽어보니 "소문자로 출력" 이라는 조건이 있길래 toLowerCase()만 붙여서 제출했더니 또 틀렸다고 나왔다. 입력 예제가 1개 뿐이라 해당 예제로는 출력이 잘 되었어서 몰랐는데 문제를 다시 읽어보니 "단어는 알파벳(a-z, A-Z)과 하이픈(-)으로만 이루어져 있다" 라고 되어있는걸 발견했다. ㅎㅋ; ;; 기존 작성했던 코드에서 replaceAll("[^a-zA-Z-]") 정규표현식을 추가해서 a-z, A-Z, - 제외한 나머지는 공백으로 대체시켰다.
2. 이번에 정규표현식을 쓰면서 ^[a-zA-z] 와 [^a-zA-z]의 차이점에 대해 알게되었다 ... !!!!!!!!! 별거 아니지만 뭔가 또 하나 배웠다는 생각에 기분이 좋았따 ㅎ "^[a-zA-Z]" translates to "begins with character from a-z or A-Z", and "[^a-zA-Z]" translates to "is not either a-z or A-Z"
3. 오늘의 느낀 점.... 문제 좀 꼼꼼하게 잘 읽고 중요한 조건같은건 미리 적어두자 !!!
4. 예제 입출력만 테스트 해보고 끝내지 말고, 내가 직접 예외적인 사항들 포함해서 테스트케이스 만들어서 테스트 해보기!
'Algorithm & SQL > BOJ' 카테고리의 다른 글
[백준 1735번 / Java] BOJ 1735 : 분수 합 (유클리드 호제법) (0) | 2024.03.02 |
---|---|
[백준 5218번 / Java] BOJ 5218 : 알파벳 거리 (0) | 2024.03.01 |
[백준 17413번 / Java] BOJ 17413 : 단어 뒤집기 2 (0) | 2024.02.28 |
[백준 1094 / Java] BOJ 1094 : 막대기 (0) | 2024.02.26 |
[백준 1924번 / Java] BOJ 1924 : 2007년 (0) | 2024.02.25 |