Park DJ
dj0998
Park DJ
전체 방문자
오늘
어제
  • 분류 전체보기 (363)
    • 백준 (363)

공지사항

인기 글

태그

  • 백준 4659
  • 백준 7662
  • 백준 15961
  • 백준 1531
  • 백준 15312
  • 백준 8892
  • 백준 6550
  • 백준 2225
  • 백준 10709
  • 백준 3049
  • 백준 24039
  • 백준 16194
  • 백준
  • 백준 7567
  • 백준 2343
  • 백준 3135
  • 백준 1495
  • 백준 2467
  • 백준 12871
  • 백준 12605
  • 백준 1011
  • 백준 15655
  • 자바
  • 백준 1064
  • 백준 16926
  • 백준 1914
  • 백준 14582
  • Java
  • 백준 2591
  • 백준 1747
hELLO · Designed By 정상우.
Park DJ

dj0998

백준 17626 Four Squares(Java)
백준

백준 17626 Four Squares(Java)

2023. 2. 3. 20:18

https://www.acmicpc.net/problem/17626

 

17626번: Four Squares

라그랑주는 1770년에 모든 자연수는 넷 혹은 그 이하의 제곱수의 합으로 표현할 수 있다고 증명하였다. 어떤 자연수는 복수의 방법으로 표현된다. 예를 들면, 26은 52과 12의 합이다; 또한 42 + 32 + 1

www.acmicpc.net


 

해석 및 팁

 


 

이 문제의 핵심은 dp [i] = dp [i- j*j] + dp [j*j]이라는 점화식을 발견하는 것입니다.  이때 dp [j*j]는 제곱수이므로 항상 1입니다. 따라서 dp [i- j*j]의 최솟값을 구한 후 1을 더해주면 됩니다.

 


 

Java 코드

 


import java.util.Scanner;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    int min;
    int n = sc.nextInt();
    int arr[] = new int[n + 1];

    arr[1] = 1;

    for(int i = 2; i <= n; i++) {
      min = 50000;
      for(int j = 1; j * j <= i; j++) {
        min = Math.min(min, arr[i - j * j]);
      }
      arr[i] = min +1 ;  //min + arr[j * j]
    }

   System.out.println(arr[n]);
  }
}

'백준' 카테고리의 다른 글

백준 1072 게임(Java)  (0) 2023.02.03
백준 10973 이전 순열(Java)  (0) 2023.02.03
백준 1735 분수 합(Java)  (0) 2023.02.03
백준 1449 수리공 항승(Java)  (0) 2023.02.03
백준 11478 서로 다른 부분 문자열의 개수(Java)  (0) 2023.02.03
    '백준' 카테고리의 다른 글
    • 백준 1072 게임(Java)
    • 백준 10973 이전 순열(Java)
    • 백준 1735 분수 합(Java)
    • 백준 1449 수리공 항승(Java)
    Park DJ
    Park DJ

    티스토리툴바