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
반응형
'알고리즘 (for 코딩테스트) > 백준_자바 (Java)' 카테고리의 다른 글
[Java 자바] 백준 알고리즘 23972번 : 악마의 제안 (0) | 2022.04.17 |
---|---|
[Java 자바] 백준 알고리즘 1074번 : Z (0) | 2022.03.23 |
[Java 자바] 백준 알고리즘 2754번 : 학점계산 (0) | 2022.03.13 |
[Java 자바] 백준 알고리즘 2355번 : 시그마 (0) | 2022.03.07 |
[Java 자바] 백준 알고리즘 24510번 : 시간복잡도를 배운 도도 (0) | 2022.02.24 |
최근댓글