- [백준] - 1157 - 단어공부 2023.10.31
2023. 10. 31. 17:00
이 문제도 풀면서 GPT 에게 물어보았다.
Stream 예제를 눈으로 많이 익히기 위해서, 먼저 시도를 해보고 물어봤는데.
처음에는 Stream.of 로 arrays 를 string 으로 바꾸려고 했는데.. new String() 이라는 쉬운 방법이 있다니 충격.
처음부터 Map 자료형을 떠올리긴 했었는데, 중복제거나 이런 부분이 머리가 아파오기 시작하면서 for 문으로 시도하였으나,
이중for 문에 if 가 들어가고, 케이스가 많아지면서 복잡해져서 포기했다.
new String(arrays) : char[] 를 String 으로 변환
chars() : String 에서 요소를 intStream 으로 변환
mapToObj(c -> (char) c ) : c 는 intStream 으로 변환된 ascii 코드의 문자 정수이며, (char) c 로 문자로 변환
filter : (Charater::isLetterOrDigit) : Charater 중에 영어문자 도는 숫자만 필터링
collect() : 스트림의 요소를 수집하여, 반환하며 어떻게 처리하고 반환할지 정의
Collectors.groupingBy() : 스트림 요소를 그룹화
Collections / Collectors 이런거 자주 사용되는데 따로 찾아봐야겠다.
package org.example;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 단어 입력 받는다.
String word = sc.nextLine().toUpperCase();
char[] arrays = word.toCharArray();
Map<Character, Long> charFrequency = new String(arrays)
.chars()
.mapToObj(c -> (char) c)
.filter(Character::isLetterOrDigit)
.collect(Collectors.groupingBy(
Character::toUpperCase,
Collectors.counting()
));
long maxFrequency = charFrequency.values().stream()
.max(Long::compare)
.orElse(0L);
String mostFrequentChars = charFrequency.entrySet().stream()
.filter(entry -> entry.getValue() == maxFrequency)
.map(entry -> entry.getKey().toString())
.collect(Collectors.joining());
if (mostFrequentChars.isEmpty() || mostFrequentChars.length() > 1) {
System.out.println("?");
} else {
System.out.println(mostFrequentChars);
}
}
}
'AREA(지속적인 일상) > 02_백준' 카테고리의 다른 글
[백준] - 25206 - 너의 평점은 (1) | 2023.11.02 |
---|---|
[백준] - 2941 - 크로아티아 알파벳 (0) | 2023.11.01 |
[백준] - 10988 - 팰린드롬인지 확인하기 (0) | 2023.10.31 |
[백준] - 3003 - 킹, 퀸, 룩, 비숍, 나이트, 폰 (0) | 2023.10.30 |
[백준] - 25083 - 쌔싹 (1) | 2023.10.30 |