**package** Test;

**import** java.util.Scanner;

**public** **class** Ex03 {

	**public** **static** **void** main(String[] args) {
/*
		Ex.3 (20점)
		[ 애국가 타자연습 PRORGRAM ]
		애국가의 가사를 4단계로 나누어 입력받는 속도와 정확도를 계산한다.
		  - 속도		= 문자열길이 * 60(초) * 1000 / 입력시간
		  - 정확도	= 일치하는 개수 / 문자열길이 * 100(백분율)
		  
		hint.
		1.	System.currentTimeMillis() : 밀리세컨드(1/1000초) 값을 반환
				↑ 위의 메서드를 이용하여 문자열을 입력받기 전, 후의 시간차로 속도 계산
		2.	String 클래스의 toCharArray()를 이용하여 
				애국가와 입력받은 문자열의 문자 하나하나를 비교하여 정확도를 계산
 */
		Scanner scan = **new** Scanner(System.***in***);

		**int** index = 4;
		String lyric[] = **new** String[index];
		lyric[0] = "동해물과 백두산이 마르고 닳도록";
		lyric[1] = "하느님이 보우하사 우리나라 만세";
		lyric[2] = "무궁화 삼천리 화려강산 대한사람";
		lyric[3] = "대한으로 길이 보전하세";
		String input[] = **new** String[index];
		
		**for** (**int** i = 0; i < lyric.length; i++) {
			**int** Speed = 0;
			**int** cnt = 0;
			**double** accuracy = 0.0;
			System.***out***.println("( " + (i + 1) + " / 4 )");
			System.***out***.println(lyric[i]);
		
			//타자속도
			  **long** sTime = System.*currentTimeMillis*();
	          input[i] = scan.nextLine();
	          **long** eTime = System.*currentTimeMillis*();
	          
	          **long** Time = eTime - sTime;
	          **int** Count = input[i].length();
	          Speed = (**int**)(Count * 60 * 1000 /Time);
	          
			//정확도
	          **char**[] inputArray = input[i].toCharArray();
	          **char**[] lyricArray = lyric[i].toCharArray();
	          
	          **if**(inputArray.length <= lyricArray.length) {
	          
	          **for** (**int** j = 0; j <inputArray.length; j++) {
	                **if** (inputArray[j] == lyricArray[j]) { // 같은 위치의 문자가 일치하는 경우
	                    cnt++; // 일치하는 문자 개수 증가
	                }
	            }
	          
	          
	          //예를 들어 cnt가 0 이고 lyricArray.lenght 16 이면 accuracy는 0
	          //예를 들어 cnt가 5 이고 lyricArray.lenght 16 이면 accuracy는 31.25 즉 실수가 나온다
	          //즉
	          //정확도를 계산할 때, 일반적으로 정확도를 퍼센트로 나타내기 위해서는 소수점 이하 값을 필요로 함. 
	          //그러나 cnt와 lyricArray.length는 모두 정수형 데이터임
	          //따라서 정수형으로 나누기 연산을 수행하면 소수점 이하 값은 버려지고 결과는 정수형으로 반환되어버림
	          //결론 형변환을 해줘야 한다
//	          accuracy = (int) (cnt /(double)lyricArray.length * 100);           1번
//	          accuracy = (int) ((double) cnt /lyricArray.length * 100);          2번
//	          accuracy = (int) ((double) cnt /(double) lyricArray.length * 100); 3번
	          // 1,2,3번 모두 동일한 결과가 나옴..
	          
	          //나는 선생님의 문제영상에 65%으로 나와서 Math.round를 사용하여 반올림 해주었음 (이때 int는 지워줘야함. 반올림해야해서)
	          /*
	            하느님이 보우하사 우리나라 만세
	            하느님이 보우하사 oooo oo 
 	            ■타자속도 : 85타 /분 ■정확도 : 65%
	            */
	          accuracy = Math.*round*(((**double**) cnt /(**double**)lyricArray.length * 100));
			//결과 출력
	         
	          System.***out***.println("\u25A0" + "타자속도 : " + Speed + "타 /분 " + "\u25A0" + "정확도 : " + (**int**) accuracy+ "%");
	          
	          } **else** {
	        	  System.***out***.println("입력 글자수가 넘어갔습니다");
	          }
		}
	}
}
package Test;

import java.util.Scanner;

public class Ex03 {

	public static void main(String[] args) {
/*
		Ex.3 (20점)
		[ 애국가 타자연습 PRORGRAM ]
		애국가의 가사를 4단계로 나누어 입력받는 속도와 정확도를 계산한다.
		  - 속도		= 문자열길이 * 60(초) * 1000 / 입력시간
		  - 정확도	= 일치하는 개수 / 문자열길이 * 100(백분율)
		  
		hint.
		1.	System.currentTimeMillis() : 밀리세컨드(1/1000초) 값을 반환
				↑ 위의 메서드를 이용하여 문자열을 입력받기 전, 후의 시간차로 속도 계산
		2.	String 클래스의 toCharArray()를 이용하여 
				애국가와 입력받은 문자열의 문자 하나하나를 비교하여 정확도를 계산
 */
		Scanner scan = new Scanner(System.in);

		int index = 4;
		String lyric[] = new String[index];
		lyric[0] = "동해물과 백두산이 마르고 닳도록";
		lyric[1] = "하느님이 보우하사 우리나라 만세";
		lyric[2] = "무궁화 삼천리 화려강산 대한사람";
		lyric[3] = "대한으로 길이 보전하세";
		String input[] = new String[index];
		
		for (int i = 0; i < lyric.length; i++) {
			int speed = 0;
			int cnt = 0;
			double accuracy = 0.0;
			System.out.println("( " + (i + 1) + " / 4 )");
			System.out.println(lyric[i]);
		
			//타자속도
			  long sTime = System.currentTimeMillis();
	          input[i] = scan.nextLine();
	          long eTime = System.currentTimeMillis();
	          
	          long Time = eTime - sTime;
	          int Count = input[i].length();
	          int Speed = (int)(Count * 60 * 1000 /Time);
	          
			//정확도
	          char[] inputArray = input[i].toCharArray();
	          char[] lyricArray = lyric[i].toCharArray();
	          
	          if(inputArray.length <= lyricArray.length) {
	          
	          for (int j = 0; j <inputArray.length; j++) {
	                if (inputArray[j] == lyricArray[j]) { // 같은 위치의 문자가 일치하는 경우
	                    cnt++; // 일치하는 문자 개수 증가
	                }
	            }
	          
	          
	          //예를 들어 cnt가 0 이고 lyricArray.lenght 16 이면 accuracy는 0
	          //예를 들어 cnt가 5 이고 lyricArray.lenght 16 이면 accuracy는 31.25 즉 실수가 나온다
	          //즉
	          //정확도를 계산할 때, 일반적으로 정확도를 퍼센트로 나타내기 위해서는 소수점 이하 값을 필요로 함. 
	          //그러나 cnt와 lyricArray.length는 모두 정수형 데이터임
	          //따라서 정수형으로 나누기 연산을 수행하면 소수점 이하 값은 버려지고 결과는 정수형으로 반환되어버림
	          //결론 형변환을 해줘야 한다
//	          accuracy = (int) (cnt /(double)lyricArray.length * 100);           1번
//	          accuracy = (int) ((double) cnt /lyricArray.length * 100);          2번
//	          accuracy = (int) ((double) cnt /(double) lyricArray.length * 100); 3번
	          // 1,2,3번 모두 동일한 결과가 나옴
	          
	          //나는 선생님의 문제영상에 65%으로 나와서 Math.round를 사용하여 반올림 해주었음 (이때 int는 지워줘야함. 반올림해야해서)
	          /*
	            하느님이 보우하사 우리나라 만세
	            하느님이 보우하사 oooo oo
 	            ■타자속도 : 85타 /분 ■정확도 : 65%
	            */
	          accuracy = Math.round(((double) cnt /(double)lyricArray.length * 100));
			//결과 출력
	         
	          System.out.println("\u25A0" + "타자속도 : " + Speed + "타 /분 " + "\u25A0" + "정확도 : " + (int) accuracy+ "%");
	          
	          } else {
	        	  System.out.println("입력 글자수가 넘어갔습니다");
	          }
		}
	}
}