728x90
반응형

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

 

4880번: 다음수

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 수열의 연속하는 세 정수 a1, a2, a3이 한 줄에 주어진다. (-10,000 < a1, a2, a3 < 10,000) a1, a2, a3은 서로 같지 않다. 입력의 마지막

www.acmicpc.net

 

 

나같은 경우에는 이 문제를 등차수열인지 확인한 후에 등차수열이 아니면 등비수열로 풀도록 짰다.

 

이 문제는 함정..(?) 실수할 만한 부분...이 몇군데 있었는데..

 

일단, 등비수열(GP)일 경우 a,b,c로 입력을 받았다고 가정했을 때,

a1, a2, a3은 서로 같지 않다. 라는 조건이 있으므로!

b/c or c/b가 공비가 될텐데 이때 나누는 수가 0일 될리는 없다. (하나라도 0이면 등비수열의 경우 전부 0임)

+ [1 1 1] 처럼 AP와 GP에 동시에 해당되는 예시도 X

 

그리고 계속 틀리게 만든 부분이 있는데... (사실 이것 때문에 블로그 글 쓰는거..)

등차수열임을 검사할 때 (a+c)/2 == b  이 식으로 검사를 했는데..

int형으로 선언했기때문에.. a=1, b=2, c=4인 등비수열이 2 == 2 가 돼서 등차수열로 분류가 된다 .. ㄷ

 

int형 대신 float로 캐스팅해줘도 되는데.. 그냥 simple하게 b-a == c-b 로 수정했다 ㅋㅋ

 

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();
        while(true){
            String s = br.readLine();
            if(s.equals("0 0 0"))
                break;
            st = new StringTokenizer(s);
            int a = Integer.parseInt(st.nextToken());
            int b = Integer.parseInt(st.nextToken());
            int c = Integer.parseInt(st.nextToken());
            if(b-a == c-b){
                sb.append("AP ").append(c+b-a).append("\n");
            }
            else{
                sb.append("GP ").append(c*(b/a)).append("\n");
            }
        }
        System.out.println(sb);
    }
}

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기