-
[네이버클라우드 캠프/3주차] 문자열 중 가장 많이 등장하는 문자 구하기네이버클라우드 캠프 | BE/Java 과제 2023. 4. 12. 14:38728x90
지난 과제를 풀며, 어렵다고 느꼈던 문제 혹은 새로운 깨달음을 준 문제들에 대해 블로그 글로 정리하고 있습니다.
'문제를 풀었을 때 (그때그때) 블로그 글로 작성해 두면 더 좋았을 텐데..'란 후회와 속상함이 생겼지만,
Map과 Entry를 사용하는 방법에 대해 이해할 수 있게 만들어준 과제를 공유하고 싶어 블로그 글을 작성합니다.
❓문제 : 문자열을 입력받고, 가장 많이 등장하는 문자와 그 개수를 출력하세요.
public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("문자열 입력 > "); String str = sc.nextLine(); // 각 문자의 개수 저장할 Map Map<Character, Integer> map = new HashMap<>(); // 문자열에서 문자 추출 및 개수 계산 for(int i = 0; i < str.length(); i++) { char c = str.charAt(i); // Map에 키(문자)의 존재 여부 if(map.containsKey(c)) { map.put(c, map.get(c) + 1); } else { map.put(c, 1); } } // 가장 많이 등장한 문자와 그 개수 출력 Character maxK = '\0'; Integer maxV = 0; for(Map.Entry(Character, Integer> entry : map.entrySet()) { Character k = entry.getKey(); Integer v = entry.getValue(); if(v > maxV) { maxK = k; maxV = v; } } System.out.println("가장 많이 등장한 문자 : " + maxV); System.out.println("등장 개수 : " + maxK); } }
처음에는 왜 Map을 사용해서 풀어야 하는지.. 오히려 배열을 사용하는 게 더 편리한 것이 아닌가 많이 고민했습니다.
만약 문자열의 길이가 정해져 있다면 (문자열의 길이가 작고, 문자 집합이 제한적인 경우)
인덱스를 이용하여 각 요소에 접근하고 처리 속도가 빠르며 메모리를 적게 사용하는 배열을 사용하는 것이 더 좋지만,
문자열의 길이와 무관하게 문자별로 등장 횟수를 쉽게 계산하기 위해서는 Map을 사용하는 것이 좋습니다.
상단의 문제를 풀며, 아래 코드를 작성하는 과정이 가장 힘들었지만 가장 뿌듯했던 것 같습니다.
if(map.containsKey(c)) { map.put(c, map.get(c) + 1); } else { map.put(c, 1); }
✅ Key point
1. Map에 이미 동일한 키가 있을 때, 새로운 값을 추가하면 기존의 값을 덮어쓴다.
2. put() 메서드 안의 값을 불러올 때 get() 메서드를 사용해도 무관하다는 것.
1번은 문제를 풀기 위한 가장 중요한 key point이자 Map 인터페이스의 중요한 특징입니다.
2번은 get(Key k) 메서드를 통해 키(k)에 해당하는 값(v)을 받아 + 1 해주는 것. (스스로 작성하고 스스로 놀랐습니다...ㅎㅎ)
🐰 마무리
위 두 가지 포인트에 대해서는 앞으로 Map을 사용하며 꼭 기억해야 할 내용인 것 같아, 블로그 글로 정리해 보았습니다.
컬렉션 프레임워크는 사용할수록 재밌는 친구네요..
컬렉션 프레임워크를 자유자재로 활용할 수 있는 날까지 파이팅 해보겠습니다. 모두 화이팅 🐰
'네이버클라우드 캠프 | BE > Java 과제' 카테고리의 다른 글
[네이버클라우드 캠프/3주차] 두 수의 합이 유일한 값의 개수 출력하기 (0) 2023.04.13 [네이버클라우드 캠프/3주차] 연속합이 가장 큰 두 수 구하기 (0) 2023.04.12 [네이버클라우드 캠프/2주차] 재귀메서드 (feat. BigInteger) (0) 2023.04.12 [네이버클라우드 캠프/2주차] 반올림 하기 (0) 2023.04.11 [네이버클라우드 캠프/2주차] 클래스의 생성과 배열 관련 메서드 (1) 2023.04.11