다희의 코딩 성장일기
[JUNGOL] 정올 1516. 단어 세기_자바 JAVA 본문
[ 문제 ] 정올 1516. 단어 세기
문제 링크 : jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=2050
[ 입출력 ]
[ 풀이 ]
< 접근 방법 및 풀이 >
- 처음엔 입력받은 문장에서 단어를 하나하나 비교해야되나? 생각했는데, 문장의 길이가 200개이므로 그렇게 비교하다간 시간초과 날 것 같았다.
- 그래서 좀 고민하다가 든 생각은 정렬하기.
- 출력시 어차피 아스키코드 순으로 정렬해야하므로 미리 정렬한 후 단어 갯수를 센 후 출력하기.
- 자세한건 코드 주석참고.
< 주의할 점 >
- 나는 서로 다른 단어 발견시 출력을 찍어서 마지막 단어는 출력이 안되서 코드를 또 추가해줬는데, 이부분 잘 확인하기.
JAVA코드
package 문자열;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class 단어세기_1516 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while(true) {
StringTokenizer st;
String s = in.readLine();
if(s.equals("END")) break; //END 만나면 끝
st = new StringTokenizer(s, " "); //공백기준 단어 끊어 읽음
int size = st.countTokens(); // token(단어)수 = 배열사이즈 크기
String s_array[] = new String[size]; //문장 안 단어 담을 스트링 배열
for (int i = 0; i < size ; i++) {
s_array[i] = st.nextToken();
}
//오름차순 후 갯수세기.
Arrays.sort(s_array);
int idx = 0, cnt = 1;
for (int i = 1; i < s_array.length; i++) {
if(!s_array[idx].equals(s_array[i])) { //서로 다른 단어 발견시
System.out.println(s_array[idx] + " " + ":" + " " + cnt);
idx = i;
cnt = 1;// 횟수 초기화
continue;
}
cnt++;
}
//마지막 단어 출력
System.out.println(s_array[idx] + " " + ":" + " "+ cnt);
}
}
}
(모바일일 경우 가로버전으로 보세요.)
REVIEW
기본 다지기 좋은 문제다.
'Algorithm > 정올' 카테고리의 다른 글
[JUNGOL] 정올 1009. 각 자리수의 역과 합(Number Reverse)_자바 JAVA (0) | 2020.12.27 |
---|---|
[JUNGOL] 정올 1880. 암호풀기(Message Decowding)_자바 JAVA (0) | 2020.12.27 |
[JUNGOL] 정올 2857. 세로읽기_자바 JAVA (1) | 2020.12.27 |
[정올 Begginer_Coder - 문자열] 2514.문자열 찾기_자바JAVA (1) | 2020.12.14 |
[정올 Begginer_Coder - 문자열] 2604.그릇_자바JAVA (0) | 2020.12.14 |
Comments