인프런 커뮤니티 질문&답변
1-5 알고리즘과 친해지기 (2) - 최빈값찾기 질문 있습니다
작성
·
18
·
수정됨
0
1. 현재 학습 진도
몇 챕터/몇 강을 수강 중이신가요?
8.1-5 알고리즘과 친해지기 (2) - 최빈값찾기
어떤 알고리즘을 학습하고 계신가요?
최빈값 찾기
2. 어려움을 겪는 부분
어느 부분에서 막히셨나요?
왜 배열로 푸는 것이 제일 낫나요?
저는 java의 map을 사용해서 풀었는데 이건 좋지 않은 풀이법일까요?
3. 시도해보신 내용
현재 작성하신 코드를 공유해주세요
public class FindMaxOccurredAlphabet0102 {
public static void main(String[] args) {
System.out.println("정답 = i 현재 풀이 값 = " + solution("hello my name is dingcodingco"));
System.out.println("정답 = e 현재 풀이 값 = " + solution("we love algorithm"));
System.out.println("정답 = b 현재 풀이 값 = " + solution("best of best youtube"));
}
public static char solution(String s) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (!Character.isLetter(c)) {
continue;
}
map.put(c, map.getOrDefault(c, 0) + 1);
}
List<Map.Entry<Character, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(
(a, b) -> b.getValue() - a.getValue()
);
return list.get(0).getKey();
}
}답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 김지협님.
질문해주신 내용은 최빈값 찾기에 대한 다양한 접근 방식입니다. Java의 Map을 사용하여 문제를 풀어주셨는데요, 이 방법은 충분히 좋은 방법입니다. 다만 배열과 비교하여 각각의 장점과 단점이 있기에 이를 잘 이해하고 활용하는 것이 중요합니다.
배열과 Map의 차이
배열:
- 고정 길이: 배열은 정해진 크기를 가지고 있습니다. 따라서 메모리 사용이 고정적이며, 효율적인 면이 있습니다. 예를 들어, ASCII 알파벳의 경우 크기는 26으로 고정되며, 직관적으로 알파벳의 빈도를 세는 데 용이합니다.
- 빠른 접근: 인덱스를 통해 빠르게 접근 가능하여, 특정한 경우 더 빠른 성능을 발휘할 수 있습니다.
- 고정 길이: 배열은 정해진 크기를 가지고 있습니다. 따라서 메모리 사용이 고정적이며, 효율적인 면이 있습니다. 예를 들어, ASCII 알파벳의 경우 크기는 26으로 고정되며, 직관적으로 알파벳의 빈도를 세는 데 용이합니다.
Map:
- 유연성: 다양한 자료형의 키를 사용할 수 있고, 크기가 동적이어서 입력 데이터에 따라 유연하게 크기를 조정할 수 있습니다.
- 가독성: 키-값 쌍을 사용하므로 읽고 이해하기가 쉬울 수 있습니다.
- 유연성: 다양한 자료형의 키를 사용할 수 있고, 크기가 동적이어서 입력 데이터에 따라 유연하게 크기를 조정할 수 있습니다.
Java 코드 평가
- 가독성과 직관성:
Map을 사용하여 알파벳의 빈도를 계산하고, 정렬하여 최빈 알파벳을 찾는 방식은 가독성이 좋고 이해하기 쉽습니다.
- 다양한 데이터 처리: 다양한 입력 데이터 형태를 처리할 수 있어 범용성이 높습니다.
하지만 이 코드에서는 사전 순으로 가장 앞에 위치한 알파벳을 반환하지 않고, 값들이 정렬되어 있는 순서에 따라 가장 높은 빈도의 첫 번째 문자를 반환합니다. 동일한 빈도의 알파벳이 있을 때 사전 순으로 먼저 오는 문자를 반환하는 기능이 필요하다면, 조금 더 수정이 필요할 수 있습니다.
참고할 만한 자료
최빈값 찾기에 대해 다양한 방법을 다룬 기존 답변을 참고하시면 좋습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




