코딩테스트/BOJ

[BOJ] 1484 다이어트 - JAVA

5월._. 2023. 3. 31.
728x90

1. 문제

 

1484번: 다이어트

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다.

www.acmicpc.net

성원이는 다이어트를 시도중이다. 성원이는 정말 정말 무겁기 때문에, 저울이 부셔졌다. 성원이의 힘겨운 다이어트 시도를 보고만 있던 엔토피아는 성원이에게 새로운 저울을 선물해 주었다. 성원이는 엔토피아가 선물해준 저울 위에 올라갔다. “안돼!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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

댓글