본문 바로가기
Programming Language/JAVA

[JAVA] 백준 문제풀이(9733번 : 꿀벌)

by NeoGul.S 2022. 12. 6.

https://www.acmicpc.net/problem/9733

 

9733번: 꿀벌

각각의 일을 한 횟수와 비율을 공백으로 구분하여 출력한다. 출력은 {Re,Pt,Cc,Ea,Tb,Cm,Ex} 순서대로 하며, 비율은 소수점 둘째 자리까지 출력한다. 주어진 목록에 없는 일은 출력하지 않는다. 입력의

www.acmicpc.net

이러한 문제다.

 

 

제출전에 이클립스로 돌려보면서 결과가 제대로 나온다 싶으면 제출하는 편인데

계속 받지 말아야할 입력을 받거나 결과가 제대로 출력되지 않아서 왜이러나 싶어서 상당한 시간을 삽질하다가

IDE 문제인가 싶어서 걍 제출했더니 통과된...

 

난이도 자체는 쉬운 문제였는데 별거 아닌 사유로 내 혈압을 올린 문제였다.

 

package source;

import java.io.*;

public class test_algo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String[] dicList = {"Re", "Pt", "Cc","Ea","Tb","Cm","Ex"};
		//사전형식으로 벌이 하는 행동들을 미리 입력해준다
		
	
		double totalWork = 0; // 입력한 작업의 개수를 담기 위한 변수
		int countAct[] = new int[7];
		//작업의 종류별 입력한 개수를 체크하기 위한 배열
		
		String input = "";
		while((input=br.readLine())!=null){
			String[] inputArr = input.split(" "); //입력한 라인을 공백으로 구분하여 배열로 저장
			totalWork += inputArr.length; //작업총량을 윗줄의 split으로 한뒤의 배열 길이로 판단한다
			
			for(int i =0;i<inputArr.length;i++) {
				for(int j=0;j<dicList.length;j++) {
					if(inputArr[i].equals(dicList[j])) { //입력한 작업 배열과 미리 정의한 사전 배열과 비교한다
						countAct[j]++; //해당 작업의 수를 증가시킨다
						break;
					}
				}
			}
		}
		
		
	for(int i=0;i<dicList.length;i++) 
		System.out.printf("%s %d %.2f\n", dicList[i], countAct[i], countAct[i]/totalWork);
	
	System.out.printf("Total %d 1.00", (int)totalWork);
	
	
	}

}

문제 해설이랄게 없는데

 

1. 미리 정리되어있는 작업의 종류를 사전형식으로 문자열 배열으로 만들어 놓고,

 

2.  입력한 문자열을 하나씩 긁어와서 split()을 이용해 공백을 기준으로 자르고, 문자열 배열로 저장한다(inputArr)

 

3. 추후 작업량 비중을 출력해야하므로 나눈 작업량의 개수을 배열의 길이로 측정하여 변수에 저장한다(totalWork)

 

4.  해당줄의 작업량을 나눈 배열과 작업의 종류를 지정해놓은 사전배열과 비교,

해당 작업명과 일치하면 countAct에 값을 증가시키고 반복문에서 break 한다.

 

5. 문제에서 요구한대로 출력해준다.