728x90
○ 문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
○ 입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
○ 출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
○ 예제 입력
Mississipi
zZa
○ 예제 출력
?
Z
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = br.readLine().toUpperCase();
char[] arr = str.toCharArray();
//중복문자 제거 및 카운트
HashMap<Character, Integer> map = new HashMap<>();
HashSet<Character> set = new HashSet<>();
for (char c : arr) {
if (set.contains(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
set.add(c);
}
//최대 값
char maxKey = ' ';
int max = 0;
for (char key : map.keySet()) {
int value = map.get(key);
if (value > max) {
maxKey = key;
max = value;
} else if (value == max) {
maxKey = '?';
}
}
bw.write(maxKey);
bw.flush();
bw.close();
}
}
○ 확인
- Stream: 자료가 모여있는 배열, 컬렉션 등의 안에 있는 일련의 숫자를 처리하는 기능을 구현한 클래스
- stream을 통해 카운트 할 수도 있고, collections를 통해 중복 개수 세기 가능
- HashSet: Set 인터페이스의 구현 클래스, 순서가 없고 중복을 허용하지 않음.
- char는 primitive type이기 때문에 Stream으로 변경이 불가능하고 Wrapper class에 해당하는 Character를 써줘야 한다.
- toCharArray는 원시형에서만 쓸 수 있나봐..쥬륵..
- Map의 값 출력은 entrySet(), keySet() 메소드 사용 가능하고, entrySet()은 key, value 모두 필요할 때 사용한다. (람다도 가능)
- char 자료형은 ''로 초기화 불가, 일반적으로 공백 초기화 사용 => ' '
728x90
'○ 기술면접 > 알고리즘' 카테고리의 다른 글
| 정렬: 단어 정렬 (백준 1181) (0) | 2023.03.23 |
|---|---|
| 정렬: 세 수 (백준 10817) (0) | 2023.03.23 |
| 정렬: 수 정렬하기 (백준 2750) (0) | 2023.03.23 |
| 구현: 단어의 개수 (백준 1152) (0) | 2023.03.23 |
| 사칙연산: 평균 (백준 1546) (0) | 2023.03.23 |
| 구현: 검증수 (백준 2475) (0) | 2023.03.23 |
| 구현: 상수 (백준 2908) (0) | 2023.03.23 |
| 구현: 음계 (백준 2920) (0) | 2023.03.23 |