-
[백준]4358: 생태학 - JAVA문제풀이/백준 2021. 4. 29. 15:39
[백준]4358: 생태학
풀이
자료구조 관련된 문제로 HashMap을 사용해서 풀었다.
HashMap으로 문자열을 입력받고, 해당 문자열이 총 몇번 입력되었는지를 key와 value쌍으로 저장해 주었다. 그 다음에 key값만을 배열로 만들어 오름차순 정렬한 후 조건에 맞게 계산해 주었다.
이번 문제를 풀면서 key값만을 가져올 수 있는 방법을 알게 되었다. 아래와 같이 KeySet().toArray()함수를 사용하여 Object형으로 반환하여 key값을 뽑아낼 수 있다.
Object[] keyArr = map.keySet().toArray(); Arrays.sort(keyArr);
그 다음으로 이 문제에서 런타임 에러를 만나게 된다면 입력 받는 부분에서 문제가 있는 가능성이 크다. 문제에서 입력 받는 개수에 대한 제약조건이 따로 명시되어 있지 않다. 그래서 처음에는 엔터를 두 번 입력 받았다면 입력을 그만 받도록 하였다. 하지만 이 문제에서는 ctrl + z, 즉 EOF를 판단하여 입력을 그만 받도록 해야 한다. 따라서 이 부분을 고치면 런타임 에러는 없어질 것이당!
코드
1234567891011121314151617181920212223242526272829import java.util.*;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);HashMap<String ,Integer> map = new HashMap<>();int count = 0;while(scan.hasNextLine()) {String str = scan.nextLine();map.put(str, map.getOrDefault(str, 0) + 1);count++;}Object[] keyArr = map.keySet().toArray(); // 키 값을 배열로 받아옴Arrays.sort(keyArr);StringBuilder sb = new StringBuilder();for(int i = 0; i < keyArr.length; i++) {int value = map.get(keyArr[i]);double percent = ((double)value /(double) count) * 100;sb.append(keyArr[i] + " " + String.format("%.4f", percent) + "\n");}System.out.println(sb.toString());}}cs '문제풀이 > 백준' 카테고리의 다른 글
[백준]2056: 작업 - JAVA (0) 2021.04.30 [백준]10282: 해킹 - JAVA (0) 2021.04.29 [백준]6416: 트리인가? - JAVA (1) 2021.04.28 [백준]1202: 보석 도둑 - JAVA (1) 2021.04.27 [백준]1655: 가운데를 말해요 - JAVA (0) 2021.04.27