-
section4.1알고리즘 2025. 8. 7. 20:57
학급 회장을 뽑는데 후보로 기호 A, B, C, D, E 후보가 등록을 했습니다. 투표용지에는 반 학생들이 자기가 선택한 후보의 기호(알파벳)가 쓰여져 있으며 선생님은 그 기호를 발표하고 있습니다. 선생님의 발표가 끝난 후 어떤 기호의 후보가 학급 회장이 되었는지 출력하는 프로그램을 작성하세요. 반드시 한 명의 학급회장이 선출되도록 투표결과가 나왔다고 가정합니다. 입력설명 첫 줄에는 반 학생수 N(5<=N<=50)이 주어집니다. 두 번째 줄에 N개의 투표용지에 쓰여져 있던 각 후보의 기호가 선생님이 발표한 순서대로 문자열로 입력됩니다. 출력설명 학급 회장으로 선택된 기호를 출력합니다. 입력예제 1 15 BACBACCACCBDEDE 출력예제 1 CANSWER
public class Question1 { public static void main(String[] args) { Question1 T = new Question1(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String str = sc.next(); System.out.println(T.solution(n, str)); } public String solution (int n, String str) { String answer = ""; // list로 쪼개서 담기 List<String> strList = new ArrayList<>(); for (int i=0; i<n; i++) { strList.add(str.substring(i, i+1)); } // list에 같은 단어이면 +1 숫자 함께 담기 HashMap<String, Integer> rslt = new HashMap<>(); Integer max = -1; for (String s : strList) { if (!rslt.containsKey(s)) { rslt.put(s,0); } else { rslt.put(s, rslt.get(s) + 1); } if (max < rslt.get(s) + 1) { max = rslt.get(s); } } // {A=2, B=2, C=4, D=1, E=1} // max, value 비교해서 최댓값 뽑기 for (String key : rslt.keySet()) { if (rslt.get(key) == max) { answer = key; } } return answer; } }정답은 맞혔지만 특정 메서드들을 몰랐기 때문에 정답과 비교했을 때 코드가 길어졌다
SOLUTION
public class Answer1 { public static void main(String[] args) { Answer1 T = new Answer1(); Scanner sc = new Scanner(System.in); int n = sc.nextInt(); String str = sc.next(); System.out.println(T.solution(n,str)); } private char solution(int n, String s) { char answer = ' '; HashMap<Character, Integer> map = new HashMap<>(); for (char x : s.toCharArray()) { map.put(x, map.getOrDefault(x, 0)+1); } int max = Integer.MIN_VALUE; for (char key : map.keySet()) { if (map.get(key) > max) { max = map.get(key); answer = key; } } return answer; } }- toCharArray : 문자열을 문자형 배열로 변환할 수 있다
- map.getOrDefault 가 생각이 안나서 if 문이 추가로 더 들어갔다
- map.ketSet() 사용법이 익숙하지 않아서 구글링 도움을 받았다
- entrySet을 사용하면 모든 key, value값을 꺼낸다
- keySet을 사용하면 모든 key값을 꺼낸다
- 참고. HashMap은 데이터를 저장할 때 key, value가 짝을 이루어 저장되며 key값으로 해시함수를 실행한 결과를 통해 저장 위치를 결정한다. 따라서 특정 데이터의 저장위치를 해시함수를 통해 바로 알 수 있기 때문에 데이터의 추가, 삭제, 특히 검색이 빠르다는 장점이 있다
728x90'알고리즘' 카테고리의 다른 글
section4.3 (3) 2025.08.07 section4.2 (0) 2025.08.07 section4.5 (0) 2025.08.06 Do it! 자료구조와 함께 배우는 알고리즘 입문(파이썬) :: DAY 04 (2) 2022.11.03 Do it! 자료구조와 함께 배우는 알고리즘 입문(파이썬) :: DAY 03 - 2 (1) 2022.11.02