이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Baekjoon] 17626: Four Squares

  • 2023.03.17 02:17
  • Algorithm/PS
글 작성자: SeoArc

문제

특정 숫자의 제곱수 합을 구할 때 그 수들의 최소 개수를 구하는 문제이다.

 

풀이

내 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Q17626 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        int[] dp = new int[n + 1];
        dp[1] = 1;

        int sqrt = 2;
        for (int i = 2; i <= n; i++) {
            if (i == Math.pow(sqrt, 2)) {
                dp[i] = 1;
                sqrt++;
                continue;
            }

            int minCount = 5;
            for (int j = 1; j*j < i; j++) {
                int count = dp[i - j*j] + 1;
                minCount = Math.min(minCount, count);
            }

            dp[i] = minCount;
        }

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

결국 풀이하지 못해 검색을 통해 힌트를 얻었다.

 

아이디어는 다음과 같다.

 

해당 숫자보다 작은 제곱수들을 돌면서 해당 숫자에서 제곱수를 뺀 값의 합 개수를 확인한다.

 

예를 들어, 현재 숫자가 27이라고 하면

1, 4, 9, 16, 25의 제곱수까지 돌면서 27에서 이 제곱수들을 뺀 값의 합 개수를 본다.

즉, 26(27-1), 23(27-4), 18(27-9), 11(27-16), 2(27-25)의 값을 확인한다.

여기서 최소 개수를 구한 다음 1을 더해준다. (제곱수에서 뺏기 때문에 제곱수 개수를 포함한 값인 1을 더한다)

 

그러면 최소 개수는 2이기 때문에 최종적으로 답은 3이 나올 것이다.

 

회고

실버3 문제였지만, 결국 못풀고 확인했다. dp문제는 역시 아직 좀 어려운 것 같다.

더 많은 문제를 풀면서 기초를 다져야겠다.

저작자표시 (새창열림)

'Algorithm > PS' 카테고리의 다른 글

[Baekjoon] 1629: 곱셈  (0) 2023.03.21
[Baekjoon] 6064: 카잉 달력  (0) 2023.03.18
[Baekjoon] 1654: 랜선 자르기  (0) 2023.03.11
[Baekjoon] 1167: 트리의 지름  (0) 2023.03.08
[Baekjoon] 7662: 이중 우선순위 큐  (0) 2023.03.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Baekjoon] 1629: 곱셈

    [Baekjoon] 1629: 곱셈

    2023.03.21
  • [Baekjoon] 6064: 카잉 달력

    [Baekjoon] 6064: 카잉 달력

    2023.03.18
  • [Baekjoon] 1654: 랜선 자르기

    [Baekjoon] 1654: 랜선 자르기

    2023.03.11
  • [Baekjoon] 1167: 트리의 지름

    [Baekjoon] 1167: 트리의 지름

    2023.03.08
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • network
  • 네트워크
  • algorithm
  • graph
  • 그래프
  • 알고리즘
  • 자바
  • java

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바