코딩테스트/ELSE

[JO] 1291 구구단 - JAVA

5월._. 2022. 6. 1.
728x90

1. 문제

 

JUNGOL

 

www.jungol.co.kr

원하는 구구단의 범위를 입력받아 해당 구간의 구구단을 출력하는 프로그램을 작성하시오.

 

<처리조건>

(1) 구간의 처음과 끝을 입력받는다. 

(2) 입력된 구간은 반드시 처음 입력 값이 끝의 입력 값보다 작아야 하는 것은 아니다.

    즉 입력된 구간의 범위는 증가하거나 감소하는 순서 그대로 출력되어야 한다.​ 

 

구구단의 시작 범위 s,와 끝 범위 e를 입력받는다.(s와 e는 2부터 9사이의 정수)

하나의 결과가 출력되면 프로그램을 종료한다.

 

시작 범위와 끝 범위사이의 구구단을 출력하되 모든 값과 부호 사이는 공백으로 구분하여 아래 출력 예와 같이 줄을 맞추어 출력해야 한다.

구구단 사이는 3개의 공백으로 구분한다. 

데이터의 크기가 주어진 범위를 벗어날 경우는 "INPUT ERROR!"를 출력하고 s와 e를 다시 입력받는다.


2. 풀이

1.  유효한 입력값이 나올 때까지 입력 받는다.

2.  시작값이 끝값보다 크면서 현재 단이 끝보다 큰 경우, 시작값이 끝값보다 작으면서 현재 단이 끝보다 작은 경우만 출력한다.

3.  한 자리 숫자가 나오면 그 앞에 공백을 붙인다.

4.  시작값>=끝값이면 단을 줄여가고, 시작값<끝값이면 단을 늘려간다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class JO_1291_구구단 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      StringBuilder sb= new StringBuilder();

      int s = Integer.parseInt(st.nextToken());
      int e = Integer.parseInt(st.nextToken());

      while(s<2 || s>9 || e<2 || e>9){
         sb.append("INPUT ERROR!\n");
         st = new StringTokenizer(in.readLine());
         s = Integer.parseInt(st.nextToken());
         e = Integer.parseInt(st.nextToken());
      }

      for(int i=1;i<10;i++){
         int dan = s;
         while((s>=e && dan>=e) || (s<e && dan<=e)){
            sb.append(dan).append(" * ").append(i).append(" = ");
            if((dan*i)<10) sb.append(" ");
            sb.append(dan*i).append("   ");
            if(s>=e) dan--;
            else dan++;
         }
         sb.append("\n");
      }

      System.out.print(sb);
   }
}

3. 결과

댓글