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라고 생각하면 이해하기 쉬울 거 같다.
'코테' 카테고리의 다른 글
[백준 / Java] 2839번 : 설탕 배달 (0) | 2023.02.18 |
---|---|
[백준 / Java] 2775번 : 부녀회장이 될테야 (0) | 2023.02.17 |
[백준 / Java] 1065번 : 한수 (0) | 2023.02.08 |
[백준 / Java] 4673번 : 셀프 넘버 (0) | 2023.02.07 |
[백준 / Java] 4344번 : 평균은 넘겠지 (0) | 2023.02.06 |