[백준] 1463번: 1로 만들기

2024. 9. 13. 00:44·PS

 

 


 

문제

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

 

 

 

 

실행 결과

 

 

 

 

 

코드(c++)

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
  // 실행 시간 줄이기
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);

  int n;
  cin >> n;

  // 숫자 i를 1로 만드는데 필요한 최소 연산횟수를 저장하는 테이블 선언 및 초기화
  vector<int> dp(n + 1, 0);

  // 첫번째는 연산 필요 없으므로 0으로 설정
  dp[1] = 0;

  for (int i = 2; i <= n; i++) {
    // 1부터 빼고나서 생각
    dp[i] = dp[i - 1] + 1;

    // 2로 나누고 최솟값  비교하여 더 적은 것을 선택
    if (i % 2 == 0) {
      dp[i] = min(dp[i], dp[i / 2] + 1);
    }

    // 3으로 나누고 최솟값 비교하여 더 적은 것을 선택
    if (i % 3 == 0) {
      dp[i] = min(dp[i], dp[i / 3] + 1);
    }
  }

  cout << dp[n];

  return 0;
}

 

 

 

 

코드 설명

 

초기에 잘못 생각했던 부분은 연산의 순서였다.
dp 개념을 몰랐을때는 곧이 곧대로 문제에 나와있는 순서대로 연산을 처리하도록 했다. 

 

하지만 여기서 중요한 것은 최소 연산횟수를 구하는 것이다!
2의 배수, 3의 배수여야만 처리 가능한 첫번째와 두번째 연산과는 달리, 1을 빼는 세번째 연산은 조건이 없다. 

따라서 항상 수행할 수 있는 세번째 연산부터 먼저 고려하고, 그 뒤에 나머지 연산이 필요한지 고려해야한다.


즉, 최소 비용을 고려하기 위한 연산의 우선순위를 따지는 것이 이 문제의 핵심이라고 볼 수 있다.

DP를 이용할 동적 배열 dp를 선언하고 문제를 풀어서 해결했다.

 

 


 

 

저작자표시 (새창열림)

'PS' 카테고리의 다른 글

[백준] 18110번: solved.ac  (0) 2024.09.15
[백준] 9095번: 1, 2, 3 더하기  (0) 2024.09.15
[백준] 1602번: 나는야 포켓몬 마스터 이다솜  (2) 2024.09.10
[코드트리] 정수 명령 처리 5  (0) 2024.09.07
[코드트리] 문자에 따른 명령 2  (0) 2024.09.06
'PS' 카테고리의 다른 글
  • [백준] 18110번: solved.ac
  • [백준] 9095번: 1, 2, 3 더하기
  • [백준] 1602번: 나는야 포켓몬 마스터 이다솜
  • [코드트리] 정수 명령 처리 5
abyss-s
abyss-s
프론트엔드 공부합니다.
  • abyss-s
    abyss-s의 블로그입니다.
    abyss-s
  • 전체
    오늘
    어제
    • 분류 전체보기 (188)
      • Web (16)
        • JavaScript (6)
        • TypeScript (1)
        • React (5)
        • Vue (0)
        • Storybook (1)
        • Next.js (1)
      • Backend & Infra (8)
        • Database (3)
        • Node.js (2)
        • SpringBoot (1)
      • PS (71)
      • CS (30)
        • OS (13)
        • Structure & Algorithm (5)
        • Network (10)
        • 정보처리기사 (2)
      • Language (18)
        • OOP (1)
        • JAVA (13)
        • C++ (4)
      • Activities (12)
        • 멋쟁이 사자처럼 (2)
        • OSSCA (3)
        • LG U+ URECA (3)
        • Project (2)
      • AI (0)
      • Git & Github (5)
      • Notion (1)
      • IT (4)
      • Statistics (11)
      • Book (4)
      • Diary (1)
      • Game (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 백준
    • 트위터
  • 공지사항

    • abyss-s의 티스토리에 오신 것을 환영합니다.
  • 인기 글

  • 태그

    통계학
    C++
    BFS
    Python
    React
    JavaScript
    코드트리
    DP
    네트워크
    github
    BAEKJOON
    OS
    생활코딩
    운영체제
    백준
    Java
    자바스크립트
    자바기반응용프로그래밍
    그리디
    파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
abyss-s
[백준] 1463번: 1로 만들기
상단으로

티스토리툴바