문제 출처 - http://jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=2050
문제
임의의 문장을 입력받아 각 단어별로 나눈 후에 단어들의 중복되는 개수를 구하는 프로그램을 작성하시오.
<처리조건>
(1) 입력된 스트링은 글자의 제한은 없다. 즉, 알파벳 대.소문자, 공백, ', ' 등도 입력으로 들어 올 수 있다.
(2) 입력된 문장에서 각 단어사이의 구분은 공백으로 한다.
(3) 단어에는 공백을 제외한 모든 문자들이 포함된다.
입력형식
임의의 문장을 입력받는다.(문장의 길이는 200 이하)
하나의 결과가 나온 후에도 계속 새로운 입력을 받다가, "END"가 입력되면 프로그램을 종료한다. (문장의 개수를 30을 넘지 않는다.)
출력형식
각 문장 단위로 단어들의 발생 빈도를 오름차순 크기(아스키코드)순으로 출력한다.
문제 유형
문자열
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.SortedMap;
import java.util.StringTokenizer;
import java.util.TreeMap;
public class JO1516_단어세기 {
static SortedMap<String, Integer> list;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true) {
String tmp = br.readLine();
if(tmp.equals("END")) break;
StringTokenizer st = new StringTokenizer(tmp, " ");
list = new TreeMap<>();
while(st.hasMoreTokens()) {
String s = st.nextToken();
if(list.containsKey(s)) {
int cnt = list.get(s);
list.put(s, ++cnt);
}else {
list.put(s, 1);
}
}
for (String key : list.keySet()) {
System.out.println(key + " : " + list.get(key));
}
}
}
}
문자열 문제를 잘 못푸는데 문자열을 연습할 수 있는 문제였고 map에 대해서도 공부할 수 있는 문제였다.
문제를 꼼꼼히 읽지 않아 END를 입력하면 더이상 입력을 받지 않고 프로그램이 종료된다는 점을 놓쳤고, ++연산자를 쓸 때 cnt++ 이렇게 뒤에 붙이는게 더 익숙해서 그런지 아무 생각 없이 그냥 cnt++하는 습관이 있는데 이러한 안좋은 버릇 때문에 틀렸었다.
좀 더 생각하고 코드를 짜야한다는 것을 다시금 상기시킨 문제이다.
'알고리즘 문제 풀이' 카테고리의 다른 글
정올 2809 약수 (JAVA 자바) (0) | 2021.06.27 |
---|---|
정올 1146 선택 정렬(JAVA 자바) (0) | 2021.06.26 |
백준 16922 로마 숫자 만들기 (JAVA 자바) (0) | 2021.06.13 |
백준 1789 수들의 합 (JAVA 자바) (0) | 2021.06.12 |
백준 2303 숫자 게임 (JAVA 자바) (0) | 2021.06.11 |