1. 문제
성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. 성원이는 엔토피아가 선물해준 저울 위에 올라갔다. “안돼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! G 킬로그램이나 더 쪘어ㅜㅠ”라고 성원이가 말했다. 여기서 말하는 G킬로그램은 성원이의 현재 몸무게의 제곱에서 성원이가 기억하고 있던 몸무게의 제곱을 뺀 것이다.
성원이의 현재 몸무게로 가능한 것을 모두 출력하는 프로그램을 작성하시오.
2. 풀이
1. 가능한 제곱수를 전부 배열로 만들어두었다. l = 1, r = 2부터 놓고 탐색한다.
2. 만약 g(=r제곱-l제곱) 가 G와 동일하다면 arraylist에 넣는다.
3. g<G라면 r++하고, 그 외는 l++한다.
4. 탐색이 끝났는데도 list 사이즈가 0이라면 -1을 출력하고 끝낸다.
5. stringbuilder에 list요소를 전부 더해서 출력한다.
import java.io.*;
import java.util.*;
public class BOJ_1484_다이어트 {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int G = Integer.parseInt(in.readLine());
int END = 50001;
int[] num = new int[END];
num[1] = 1;
for(int i=2;i<END;i++) num[i] = i*i;
ArrayList<Integer> list = new ArrayList<>();
int l = 1, r = 2, g;
while(l<r && r<END){
g = num[r]-num[l];
if(g==G) list.add(r);
if(g<G) r++;
else l++;
}
if(list.size()==0) {
System.out.println(-1);
return;
}
StringBuilder sb = new StringBuilder();
for(int ans:list) sb.append(ans).append('\n');
System.out.print(sb);
}
}
3. 결과
while 조건을 하나 빠뜨려서 추가했다.
제곱수 조건을 317까지로 설정했는데 50000^2-49999^2 = 99999 라서 범위설정을 다시했다.
그리고 문제 조건중에 가능한 몸무게가 없다면 -1을 출력해야하는데 그 처리를 하지 않아서 한번 더 틀렸다!
마지막 둘은 같은 코드인데 java 8 java 11 차이가 이 문제에서도 나나 궁금해서 다시 제출해봤다.
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 2167 2차원 배열의 합 - JAVA (0) | 2023.04.02 |
---|---|
[BOJ] 15565 귀여운 라이언 - JAVA (0) | 2023.04.01 |
[BOJ] 15961 회전초밥 - JAVA (0) | 2023.03.30 |
[BOJ] 2230 수 고르기 - JAVA (0) | 2023.03.29 |
[BOJ] 1337 올바른 배열 - JAVA (0) | 2023.03.28 |
댓글