해당 문제를 풀때는 Main클래스 외부에 다른 클래스를 만들어서 최대한 객체지향프로그래밍언어스럽게 풀려는 노력을 했습니다.
문제풀이
0. 문제해결을 위한 메소드를 가지는 클래스를 선언 (글자입력과 관련되었기 때문에 Typing으로 명명)
1. 어떻게 해결해야할 지 막막했지만 우선 입력받은 값의 자료형을 문자열에서 정수형으로 변환시켜야했기 때문에 관련 메소드를 우선적으로 작성.
2. readLine()으로 읽은 문자열에서 공백이 숫자들을 구분하고 있음.
다수의 자료를 한번에 처리 -> 배열, For-Loop 활용
Integer.parseInt(String str)을 참조하여 메소드 식별자의 이름을 parseIntArr로 표기
3. 두번째 라인에서 받은 숫자들은 코딩을 시작한 후부터(기준점) 입력을 할때마다의 시간을 표기한 것.
마지막 입력으로부터 c초 동안 남아있으므로 각 입력간의 시간이 c초를 넘어서면 모니터상의 문자는 사라짐.
/*
* 1, 2, 3, 4, 5, 6, ... n => n개의 문자입력
* 2, 4, 8, 15, 50, 90, ... ? => 코딩시작시점을 기준으로 문자를 입력할 때마다 경과한 시간
* a1 a2 a3 a4 ...
* n번째 입력되었을 때의 시간과 n+1번째 입력되는 시간의 차이가
* c초보다 크면 기존에 입력된 문자들은 사라지고 마지막에 입력된 문자만 남는다.
*/
4. 화면에 출력되는 문자개수를 구할 때, 비교대상이 되는 두 경과시간과 for문의 메커니즘 고려
public static int getNumOfChar(int[] arr, int c) {
int count = 1;
for(int i=0, j=1; i<arr.length-1; i++, j++) { //n번째 시간과 n+1번째 시간의 차
if(arr[j]-arr[i] > c) count=0;
count++;
}
return count;
}
5. 필드를 사용할 필요가 없었기 때문에 인스턴스가 없어도 호출할 수 있도록 정적매소드로 선언
-----------------------------------------------------------------------------------------------------------------------------------
- 무엇을 요구하는지 이해하는데 시간이 걸렸던 문제였습니다.
- Scanner클래스는 whitespace를 구분자로 인식하기 때문에,
처음에는 아래처럼 Scanner를 활용하여 첫줄에 입력되는 입력횟수(n)와 코드가 남아있는시간(c)을 Typing 클래스의 인스턴스 초기화값으로 잡아주려고 하였으나,
goorm테스트 결과 오류가 발생하여 BufferedReader로 한줄씩 두줄을 읽어들었습니다.
(이클립스에서는 정상적으로 실행되었음.)
// <Scanner활용 시도>
class Typing {
public n;
public c;
public Typing(){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
c = sc.nextInt();
}
...
public class Main {
public static void main(String[] args) {
...
Typing ty = new Typing();
... = br.readLine().split(" ");
- 외부클래스를 생성하고 이를 사용하여 프로그램을 생성
-----------------------------------------------------------------------------------------------------------------------------------
<소스코드 및 실행결과>
-참고-
'코딩연습' 카테고리의 다른 글
[코딩연습] 여름의 대삼각형 (구름 - 1단계) (0) | 2021.05.12 |
---|---|
[코딩연습]태민이의 취미 (구름-1단계) [통과x] (0) | 2021.05.10 |
[코딩연습] 시험성적 평균과 등급 구하기 (구름-1단계) (0) | 2021.05.03 |
[코딩연습] 369 게임 (구름 - 1단계) (0) | 2021.05.02 |
[코딩연습] 약수 구하기 (1단계) (0) | 2021.05.01 |