-
https://www.acmicpc.net/problem/4358
4358번: 생태학
프로그램은 여러 줄로 이루어져 있으며, 한 줄에 하나의 나무 종 이름이 주어진다. 어떤 종 이름도 30글자를 넘지 않으며, 입력에는 최대 10,000개의 종이 주어지고 최대 1,000,000그루의 나무가 주어
www.acmicpc.net
https://github.com/JUNGSOONIL/JAVA/blob/main/BAEKJOON%204358
GitHub - JUNGSOONIL/JAVA: JAVA 소스 코드
JAVA 소스 코드. Contribute to JUNGSOONIL/JAVA development by creating an account on GitHub.
github.com
해당 문제는 나무의 이름이 주어졌을 때 해당 나무들을 이름순으로 출력해 주면서
전체 나무 수에서 몇 퍼센트를 차지하는지 출력하는 문제다.
해당 문제가 신기했던 게 입력값에 대해서 범위를 주어 주지 않는다
그래서 알아보니 EOF라는 개념을 사용해야 한다고 한다.
EOF는 End of File의 약자로, 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타내는 용어라고 한다.
검색해 보니 Scanner, BufferedReader에 따라 사용법이 달랐고
사용법 자체는 Scanner이 쉬워 보였으며, BufferedReader 방법으로 검색했을 때
가장 많이 나오는 방법이 있었는데 해당 방법이 나한테는 적용이 안돼서 찾아보다가
지금 내 방법처럼 사용한 소스를 보게 되어 해당 방식으로 진행하였다.
내가 안됐던 코드
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = ""; while((input = br.readLine()) != null) { // 내용 }
내가 사용한 코드
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String input = br.readLine(); while (true) { // 내용 if(input == null || input.length() == 0) break; }
입력은 위와 같은 방식으로 진행했고, 문제는 그냥 TreeMap를 이용해 쉽게 해결했다.
다만 퍼센트를 구하는 부분에서 4자리를 표현하는 방법에서 String.format을 사용해서 표현했으며,
Map 메서드 중에 getOfDefault 메서드를 사용해서 입력값이 없으면 0 +1을 이미 존재하면
존재한 값 +1을 다시 넣어주는 식으로 진행하였다.
728x90'알고리즘 > Baekjoon' 카테고리의 다른 글
Baekjoon 17143 낚시왕 JAVA (0) 2021.11.14 Baekjoon 14891 톱니바퀴 JAVA (0) 2021.11.14 Baekjoon 11758 CCW JAVA (0) 2021.11.14 Baekjoon 2468 안전영역 JAVA (0) 2021.11.13 Baekjoon 2458 키 순서 JAVA (0) 2021.11.13 댓글