Algorithm/JUNGOL

[정올] 213 : 파일입출력 - 형성평가9 (*)

Gyuri 2022. 1. 12. 18:45

문제

공백을 포함한 한 문장을 입력받아서 전체 길이와 가장 긴 단어를 출력하시오.

단, 문장의 길이는 최대 100자 이내이고, 길이가 가장 긴 단어가 여러 개인 경우 공백으로 분리하여 한 줄에 입력 받은 순서대로 모두 출력하시오.

 

이 문제에서의 단어란? 공백으로 분리하는 문자열을 뜻한다.
"i am a boy." 문자열의 경우
"i", "am", "a", "boy."가 각각 단어이다.

 

* 표준입출력방식으로 작성하세요.

 

입력 예

The largest organ in the body is the liver.

출력 예

43
largest

 

코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String s = sc.nextLine();
        String[] arr = new String[100];
        arr = s.split(" "); // 공백 기준으로 분리

        // 길이가 가장 긴 단어 찾기
        int max = arr[0].length();

        ArrayList<String> list = new ArrayList<String>();

        for (int i = 0; i < arr.length; i++) {
            if (arr[i].length() >= max) { // max값보다 해당 단어의 길이가 더 길면
                max = arr[i].length(); // 그 단어의 길이를 max에 저장
            }
        }

        for(int j=0; j<arr.length; j++) {
            if(arr[j].length() == max) {
                list.add(arr[j]);
            }
        }

        System.out.println(s.length());
        // arrayList에 있는 단어들출력
        for(int i=0; i<list.size(); i++) {
            System.out.print(list.get(i) + " ");
        }
    }
}

▶ 길이가 긴 단어를 문자열 배열로 저장하려 했는데, 배열의 크기를 설정하는 것과 null로 저장되는 등의 문제가 있어 ArrayList를 사용해서 가장 긴 단어 (단어의 길이가 max인 단어들) 들을 add로 ArrayList에 넣어주고 get을 이용해 출력했다.

 

▶max값과 각 단어들의 길이를 비교한 후 가장 긴 단어의 길이로 max의 값을 바꾸는 for문 안에서 가장 긴 단어를 list에 삽입하도록 코드를 짰었는데, 그렇게 짜보니 max의 초기값으로 설정했던 arr[0]도 list에 들어가는 등의 문제가 있었다. 따라서, 가장 길이가 긴 단어의 길이 (max값)를 구하는 for문과 해당 단어를 list에 저장하는 for문을 따로 구현했다.