Red Glitter Pointer

 

 

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. 예제 입출력만 테스트 해보고 끝내지 말고, 내가 직접 예외적인 사항들 포함해서 테스트케이스 만들어서 테스트 해보기! 

 

+ Recent posts

loading