반응형
문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
입력
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
출력
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는?를 출력한다.
package codingTest.bronze;
import java.util.*;
import java.util.stream.Collectors;
public class Bj1157 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String upStr =str.toUpperCase();
ArrayList<Character> list = new ArrayList<>();
for (int i = 0; i < upStr.length(); i++) {
list.add(upStr.charAt(i));
}
// 문자 빈도수 계산
Map<Character, Long> frequencyMap = list.stream()
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
// 가장 많이 사용된 문자의 빈도수 찾기
Long maxFrequency = Collections.max(frequencyMap.values());
// 가장 많이 사용된 문자들 필터링
List<Character> mostFrequentChars = frequencyMap.entrySet().stream()
.filter(entry -> entry.getValue().equals(maxFrequency))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
// 결과 출력
if (mostFrequentChars.size() == 1) {
System.out.println(mostFrequentChars.get(0));
} else {
System.out.println("?");
}
}
}
대소문자를 구분하지 않아야 하기 대문에 str.toUpperCase() 사용
stream을 활용하기 위해 list에 각 문자를 넣어줌
stream을 활용해서 빈도수 계산
Map<Character, Long> frequencyMap = list.stream()
.collect(Collectors.groupingBy(c -> c, Collectors.counting()));
가장 많이 사용된 빈도수를 찾은 뒤에
Long maxFrequency = Collections.max(frequencyMap.values());
가장 많이 사용된 문자들을 필터링 한다.
List<Character> mostFrequentChars = frequencyMap.entrySet().stream()
.filter(entry -> entry.getValue().equals(maxFrequency))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
마지막으로 가장 많이 사용된 문자가 만약 1 이상이면 해당 문자를 반환하고
두 개이상이라면 "?" 을 반환한다.
if (mostFrequentChars.size() == 1) {
System.out.println(mostFrequentChars.get(0));
} else {
System.out.println("?");
}
반응형
'Algorithm' 카테고리의 다른 글
[알고리즘] Backtracking(백트래킹) (0) | 2023.06.23 |
---|---|
알파벳 전체를 포함하는 String[] 배열 만들기 - 자바(JAVA) (0) | 2023.06.16 |
백준 9095 문제 (순열을 이용한 풀이 및 dp 풀이) - 자바(JAVA) (0) | 2023.06.14 |
Selection Sort - Sorting Elements by Selection -JAVA (0) | 2023.06.13 |
선택 정렬(Selection Sort) - 자바(JAVA) (0) | 2023.06.13 |