본문 바로가기
ALGORITHM/C++ - 백준

[백준 1463] 1로 만들기

by DDongYeop 2023. 10. 18.
728x90

문제 

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

 

1463번: 1로 만들기

첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.

www.acmicpc.net

 

 

문제 분석 

수가 입력 되고 그 수가 3으로 나눠지면 3으로 나누고, 2로 나눠지면 2로 나누고, 안 나눠진다면 1을 뺴는 간단한 문제다. 

 

 

알고리즘 설계

수가 2로 나눠지면 2를 나눈 값을 넣고, 3으로 나눠진다면 3으로 나누고, 다 아니라면 1을 뺸다. 

 

 

코드

#include <iostream>
#include <queue>

using namespace std;

int main()
{
    int index;
    queue<pair<int, int>> q;

    cin >> index;
    q.push(make_pair(index, 0));

    while (!q.empty())
    {
        if (q.front().first == 1)
            break;

        if (q.front().first % 2 == 0)
            q.push(make_pair(q.front().first / 2, q.front().second + 1));
        if (q.front().first % 3 == 0)
            q.push(make_pair(q.front().first / 3, q.front().second + 1));
        q.push(make_pair(q.front().first - 1, q.front().second + 1));
        q.pop();
    }

    cout << q.front().second;
}

 

 

queue가 아니여도 풀 수 있을 것이다. 

 

 

728x90

'ALGORITHM > C++ - 백준' 카테고리의 다른 글

[백준 11725] 트리의 부모 찾기  (1) 2023.10.18
[백준 1068] 트리  (0) 2023.10.18
[백준 5525] IOIOI  (1) 2023.10.18
[백준 14940] 쉬운 최단거리  (0) 2023.10.18
[백준 16928] 뱀과 사다리 게임  (1) 2023.10.18

댓글