[백준 BOJ] 18096번 Арифметическая магия (C++/cpp)

2024. 6. 2. 16:13PS (Program Solving)/BOJ (백준)

문제 설명

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

 

백준 BOJ 18096번 Арифметическая магия 문제 사진

 

접근 방법 - (알고 보면) 아주 간단한 수학 문제

백준의 18096번 문제는 기초적인 수학 지식이 있다면 아주 쉽게 해결할 수 있는 문제이다.

해당 문제는, 마술사가 아래와 같은 수법(?)을 통해 마술을 부릴 때 입력값에 따라 "관객이 생각하는 숫자"를 구하여 출력해야 하는 문제이다.

1. 관객에게 2개의 숫자를 떠올려보라고 한다. (편의상 a, b라 칭하겠다.)
2. 두 숫자에 각각 1씩 더한 수를 서로 곱하도록 한다. (편의상 이를 multi라 칭하겠다.)
3. multi 값에 a값을 빼고 b값을 뺀다. 그리고 두 수의 곱인 a*b만큼 뺀다.
4. 3의 결괏값에 대해 N제곱을 한다. N은 입력으로 주어진다.
5. 관객의 얼굴을 유심히 보고 4의 결과를 맞춘다.

문제 설명 자체는 외국어로 되어있어, 필자는 아래 한국어 번역문을 참고하며 문제를 해결하였다.

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

 

미리 이야기하자면, 문제 설명이 거창할 뿐이지 정작 문제 설명대로 식을 적어보면 아주 간단하다.

위 일련의 과정을 식으로 풀어보면 아래와 같다.

(multi - a - b - a*b)^N = ((a+1)(b+1) - a - b - a*b)^N
   => ((a*b + a + b + 1) - a - b - a*b)^N
   => 1^N

위 식대로라면, 입력값에 해당되는 N과 상관없이 1이라는 결과가 공통적으로 나온다는 점을 알 수 있다.

따라서 정답은 입력값과 상관없이 1이라는 고정된 값이 나오게끔 해야 한다.

 

더 이상의 설명은 필요 없다고 판단되어, 위 내용으로 이만 설명을 간추리도록 하겠다.

필자는 아래처럼 코드를 작성하여 문제를 해결하였다.

반응형

 

성공한 코드

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

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

	cout << 1 << endl;
}

 

제출 결과

백준 BOJ 18096번 Арифметическая магия 문제 C++ 제출 결과

(2023.07.30 백준 18096번 문제 제출 결과)

이렇게 되면 Text로 푸는 게 오히려 나을지도...

반응형