본문 바로가기
PS/BOJ

백준 1111 자바 - IQ Test (BOJ 1111 JAVA)

by Nahwasa 2021. 11. 2.

문제 : https://www.acmicpc.net/problem/1111

코드 : https://github.com/NaHwaSa/BOJ_BaekjunOnlineJudge/blob/master/01100/BOJ_1111.java

 

 

  쉽게봤더니 생각보다 예외처리할게 많았다. 그래도 이정도면 무난한 편인듯. 'A'와 'B'가 언제 발생할지만 잘 생각해보면 된다.

 

1. 우선 n이 2 이상일 때 첫번째 수와 두번째 수가 동일한 경우를 생각해봐야 한다. 이게 찾기 제일 어려웠다.

 

[1 1 1 1 ...] 이런 경우이다. 처음엔 2차방정식이 안풀리니 당연히 'A'일꺼라 생각했는데, 2x-1 과 같은 경우 가능하다. 그러니 동일한게 이어진다면 동일한 값을 출력만 해주면 된다. 다만 [1 1 2 ..] 이렇게 갑자기 숫자가 바뀌면 'B'이다. 이 부분을 처리하는게 코드의 '// 1' 부분이다.

 

 

2. 다음으로 '1'에 포함되지 않는 경우, n이 2 이하라면 2차방정식을 풀 수 없으므로 무조건 'A'이다. 이 부분이 코드의 '// 2' 부분이다.

 

 

3. 그럼 이제 다음의 방정식을 풀어야 한다.

여기서 f(n-1)은 이전값, f(n)은 현재값으로 알고 있으므로 미지수는 a와 b의 두개 뿐이다. 그럼 식이 2개가 있어야 풀 수 있다. 따라서 '2'와 같은 경우는 a와 b를 구할 수 없어 무조건 'A'인 것이다.

1번째수와 2번째수 사이의 방정식과, 2번째수와 3번째수 사이의 방정식으로 a와 b를 구하면 된다.

예를들어 예지 입력 1의 경우

 

1a + b = 4

4a + b = 13

 

이므로 3a = 9 -> a=3이 된다. 주의점은 a와 b는 정수라고 했으므로, a가 정수가 아닐 경우는 'B'이다.(코드의 32line)

b는 다시 a+b=4에 넣어서 3+b=4이므로 b=1이 된다.

그럼 a와 b가 나왔으므로 배열 전체를 확인하며 모두 성립하는지 확인한다. 하나라도 성립하지 않으면 'B'이다.

최종적으로 '마지막수 * a + b'가 답이된다. 이 부분이 코드의 '// 3' 이하의 부분 이다.

 

댓글