ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BOJ) 다음수
    알고리즘/백준 2020. 6. 13. 20:28
    반응형

    다음수

     

    4880번: 다음수

    문제 등차수열(AP)은 인접한 두 수의 차이(공차)가 일정한 수열이다. 예를 들어, 3, 5, 7, 9, 11, 13, ...은 차이가 2로 일정한 등차수열이다. 이 문제에서 등차수열의 공차는 항상 0이 아닌 정수이다. 등

    www.acmicpc.net

     

    풀이

     

    이 문제도 복잡하게 생각할 것 없이 간단하게 풀었다.

     

    주어진 숫자들이 등차수열인지 등비수열인지 판별하고, 그 다음 수를 AP num 또는 GP num으로 출력을 해주는 것이기 때문에 판별 메소드를 구해야하나 생각했었다.

     

    하지만, 주어진 숫자의 범위가 |numbers| < 10000 로 매우 협소하고, 다음 숫자를 구해야 하기 때문에 그냥 둘 다 돌리기로 선택했다.

     

    등차수열인지 판별하고 맞다면 다음 수를 담아서 출력하는 isAP 메소드와 등비수열에 따른 isGP 메소드를 만들었다.

    (처음에 판별식으로 할까 생각해서 isAP, isGP로 네이밍을 한 것 같다..)

     

    등차 수열이라면, AP 를 담은 StringBuffer에 붙여 출력해주었고, GP도 이에 따라 출력해주었다.

     

    코드

     

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class NextNum_4880 {
        final static String END = "0 0 0";
        final static int SIZE = 3;
    
        public static void main(String[] args) throws IOException {
            solution(new BufferedReader(new InputStreamReader(System.in)));
        }
    
        private static void solution(BufferedReader br) throws IOException{
            while(true) {
                String inputStr = br.readLine();
    
                if(inputStr.equals(END)) {
                    break;
                }
                int[] numArr = new int[SIZE];
                StringTokenizer st = new StringTokenizer(inputStr);
    
                for(int i=0; i<SIZE; i++) {
                    numArr[i] = Integer.parseInt(st.nextToken());
                }
    
                isAP(numArr);
                isGP(numArr);
            }
            br.close();
        }
        private static void isAP(int[] numArr) {
            StringBuffer sb = new StringBuffer("AP ");
            if(numArr[1] - numArr[0] == numArr[2] - numArr[1]) {
                int num = numArr[2] +numArr[1] - numArr[0];
                sb.append(num);
                System.out.println(sb.toString());
            }
        }
    
        private static void isGP(int[] numArr) {
            StringBuffer sb = new StringBuffer("GP ");
            if((double)numArr[1] / numArr[0] == (double)numArr[2] / numArr[1]) {
                int num = numArr[2] *(numArr[1] / numArr[0]);
                sb.append(num);
                System.out.println(sb.toString());
            }
        }
    }
    반응형

    '알고리즘 > 백준' 카테고리의 다른 글

    BOJ) 양 한마리... 양 두마리...  (0) 2020.06.18
    BOJ) 자동차경주대회  (0) 2020.06.18
    BOJ) 빗물  (0) 2020.06.13
    BOJ) 조약돌 꺼내기  (0) 2020.06.13
    BOJ) 귀여운 수~ε٩(๑> ₃ <)۶з  (0) 2020.06.12

    댓글

Designed by Tistory.