문제 : 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' 이하의 부분 이다.
'PS > BOJ' 카테고리의 다른 글
백준 1485 자바 - 정사각형 (BOJ 1485 JAVA) (0) | 2021.11.03 |
---|---|
백준 1195 자바 - 킥다운 (BOJ 1195 JAVA) (0) | 2021.11.02 |
백준 23334 자바 - Olympic Ranking (BOJ 23334 JAVA) (0) | 2021.11.02 |
백준 22728 자바 - Amida, the City of Miracle (BOJ 22728 JAVA) (0) | 2021.10.30 |
백준 1004 자바 - 어린 왕자 (BOJ 1004 JAVA) (0) | 2021.10.29 |
댓글