[백준 / Java] 1157번 : 단어 공부

개발자가 되고 싶어요 ㅣ 2023. 2. 9. 06:50

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 


 


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import java.util.*;
 
public class Main {
    public static void main(String[] args) {
        // 단어 입력받아 소문자로 변경
        Scanner sc = new Scanner(System.in);
        String word = sc.nextLine();
        word = word.toLowerCase();
 
        // 알파벳 개수 세기 위해 alphabet 생성
        List<Integer> alphabet = new ArrayList<>();
        for (int i = 0; i < 26; i++) {
            alphabet.add(0);
        }
 
        // 단어 쪼개서 wordList에 넣기
        List<Character> wordList = new ArrayList<>();
        for (int i = 0; i < word.length(); i++) {
            wordList.add(word.charAt(i));
        }
 
        // 단어 알파벳들을 순회하며 alphabet 개수세기
        for (int w : wordList) {
            w -= 97;
            alphabet.set(w,alphabet.get(w)+1);
        }
 
        // 알파벳 리스트에서 가장 값이 높은 인덱스 뽑아내기
        int max = Collections.max(alphabet);
        int maxIndex = alphabet.indexOf(max);
 
        if (Collections.frequency(alphabet,max) >1 ) {
            System.out.println("?");
        }else {
            System.out.println((char)(maxIndex+65));
        }
    }
}
cs

 

 

이번 문제를 푸는 과정에서 Array와 List와 ArrayList를 공부했다.

우선 Array(배열)는 객체 생성시 우선적으로 크기 할당을 하고 그 크기만큼의 공간을 생성하여 그 후 인덱스로 삽입/삭제/조회 하는 방식이다. 그렇다보니 조회는 빠르지만 삽입/삭제는 느리다.

List(리스트)는 크기 할당이 필요 없고 때문에 인덱스가 없다. 데이터의 유무에 따라 자동적으로 크기가 늘어나고 줄어드는 방식이다. 그렇기 때문에 삽입/삭제는 빠르고 조회는 느리다.

각각의 장단점이 존재하는데 이 장점들을 합쳐서 만들어진게 ArrayList이다.

간단하게 인덱스 활용이 가능한 List라고 생각하면 이해하기 쉬울 거 같다.