다희의 코딩 성장일기

[JUNGOL] 정올 1516. 단어 세기_자바 JAVA 본문

Algorithm/정올

[JUNGOL] 정올 1516. 단어 세기_자바 JAVA

ilmiodiario 2020. 12. 27. 15:59

 

[ 문제 ]  정올 1516. 단어 세기

 

 

 

문제 링크jungol.co.kr/bbs/board.php?bo_table=pbank&wr_id=788&sca=2050

 

JUNGOL

 

www.jungol.co.kr

 

 


 

[ 입출력 ]

 

 

 


 

[ 풀이 ]

 

< 접근 방법 및 풀이 >

 

  •  처음엔 입력받은 문장에서 단어를 하나하나 비교해야되나? 생각했는데, 문장의 길이가 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

기본 다지기 좋은 문제다.

Comments