[백준 BOJ] 28519번 Планеты двух измерений (C++/cpp)

2024. 11. 30. 16:48PS (Program Solving)/BOJ (백준)

문제 설명

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

 

백준 BOJ 28519번 Планеты двух измерений 문제 사진

 

접근 방법 - 규칙을 활용한 기초적인 사칙연산 문제

백준의 28519번 문제는 정해진 규칙을 참조하면서 쉽게 해결할 수 있는 사칙연산 문제이다.

해당 문제는, 2종류의 각 초콜릿 개수가 주어지고 초콜릿을 먹는 특정 규칙이 있을 때 최대로 먹을 수 있는 초콜릿의 개수를 구하여 출력해야 하는 문제이다.

이때, 초콜릿을 먹는 규칙은 아래와 같다.

- 초콜릿은 한 번에 하나씩 먹을 수 있다.
- 직전에 먹은 초콜릿과 다른 초콜릿을 먹을 수 있다.
(다만, 처음 먹는 경우라면 원하는 종류의 초콜릿을 골라서 먹으면 된다.)

해당 문제는 한국어로 적혀있지 않아, 한국어 지문 번역본을 참고하면서 풀어보길 바란다.

https://www.acmicpc.net/board/view/124770

 

필자는 종류 A와 종류 B의 초콜릿이 있다고 가정할 때, 그 둘의 개수가 같은 경우와 다른 경우로 나누어 연산을 시도해 보았다.

* A와 B의 개수가 같을 경우엔 두 종류를 번갈아가며 먹을 때 모두 먹을 수 있다.
A의 개수가 2개이고, B의 개수가 2개인 경우엔 위와 같은 순서로 초콜릿을 먹을 수 있다.
따라서, A==B인 경우엔 A+B가 정답임을 알 수 있다.

* 다만, A와 B의 개수가 다를 경우엔 한 종류의 초콜릿은 반드시 다 먹을 수 있게 된다.
다만, 개수가 많은 초콜릿은 다 먹을 수 있거나 그중 일부만 먹을 수 있다.
이때 최댓값을 구하라고 하였으니, 위와 같은 경우에 B 초콜릿은 (A 초콜릿 개수)+1만큼 먹어야 최대가 나올 수 있다.
따라서, A!=B인 경우엔 (개수가 적은 초콜릿)*2+1가 정답임을 알 수 있다.

필자는 위 풀이 방식으로 코드를 작성하였는데, 혹여나 해당 문제를 해결하는 데에 어려움을 겪고 있다면 아래의 코드와 설명을 참고하면 도움이 될 것이다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

코드의 실행 순서

1) 두 종류의 초콜릿 개수(m, n)를 각각 입력받는다

 

2) 2개의 경우로 나누어서, 연산을 취하도록 한다. (로직의 출처는 위 설명을 참고)

- m과 n이 같다면, m+n를 즉시 정답으로 출력한다.

- m과 n이 다르다면, m과 n 중 더 작은 값으로 min을 초기화한 다음에 min*2+1을 정답으로 출력한다.

 

3) 2)를 통하여 정답을 출력하였다면, 실행을 종료한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
#define endl '\n'
using namespace std;

//백준 28519번 코드
int main() {
    ios::sync_with_stdio(false);
    cin.tie(NULL);   cout.tie(NULL);

    int m, n;
    cin >> m >> n;

    if (m == n) {
        cout << m + n << endl;
    }
    else {
        int min = m > n ? n : m;
        cout << min * 2 + 1 << endl;
    }
}

 

제출 결과

백준 BOJ 28519번 Планеты двух измерений 문제 C++ 제출 결과

(2024.03.30 백준 28519번 문제 제출 결과)

반응형