본문 바로가기
Language/C++

[C++_백준] 16430, 15740, 15964

by 전전긍긍 2022. 2. 12.

16430. 제리와 톰

문제

톰은 마트에서 치즈 1kg 을 사서 집으로 돌아왔습니다.

그런데 톰이 한눈을 판 사이 제리가 와서 A/B kg 만큼 훔쳐갔습니다.

제리가 치즈를 훔쳐 간 후 톰이 가지고 있는 치즈의 무게는 얼마인가요?

 

입력

첫 번째 줄에 두 정수 A, B (1 ≤ A < B ≤ 9) 가 주어집니다.

A와 B는 서로소임이 보장됩니다.

 

출력

정답을 기약분수로 표현했을 때 P/Q kg 이라면 첫 번째 줄에 P와 Q를 공백을 사이에 두고 출력합니다. 

 

소스코드
#include <iostream>
using namespace std;

int main() {
	
	int a, b;
	cin >> a >> b;

	int na = b - a;
	int nb = b;

	//유클리드 호제법
	while (nb != 0)
	{
		int c = na % nb;
		na = nb;
		nb = c;
	}

	cout << (b - a) / na << " " << b / na;

}

💡유클리드 알고리즘 : 2개의 자연수 또는 정식의 최대공약수를 구하는 알고리즘 (출처: 위키백과)

❓기약분수를 어떻게 코드로 짜야할까?

❗기약분수를 나누는 수는 분자와 분모의 최대공약수이다. 최대공약수를 구하면 답을 알 수 있다. 최대공약수를 구하는 방법은 몫을 나머지로 반복하여 나누는 것이다.(→ 이것을 유클리드 호제법이라고 한다.)

(본 포스팅 하단에 도움을 받은 링크를 걸어놓았다.)


15740. A + B - 9 (서브태스크)

문제

두 정수 A B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A B (-1010000  A, B ≤ 1010000)가 주어진다.

 

출력

첫째 줄에 A+B를 출력한다.

 

소스코드
#include <iostream>
using namespace std;

int main() {
	
	long long a, b;
	cin >> a >> b;

	cout << a + b;

	return 0;
}

75점 이상은 실력 부족으로 골드 정도가 되었을 때, 다시 도전 예정,,


16430. 제리와 톰 (서브태스크)

문제

부산일과학고등학교의 효진이는 수학의 귀재이다. 어떤 문제라도 보면 1분 내에 풀어버린다는 학교의 전설이 내려올 정도였는데, 이런 킹ㅡ갓 효진에게도 고민이 생겼다. 대부분의 문제에서 반복되는 연산이 있었기 때문이다! 이 연산은 너무 길어서 종이에 풀던 효진이는 너무 고통스러워서, 자신이 새로 연산자를 만들기로 했다.

연산자의 기호는 @으로, A@B = (A+B)×(A-B)으로 정의내리기로 했다.

하지만, 효진이는 막상 큰 숫자가 들어오자 계산하기 너무 귀찮아졌다.

효진이를 도와 정수 A, B가 주어지면 A@B를 계산하는 프로그램을 만들어주자!

 

입력

첫째 줄에 A, B가 주어진다. (1 ≤ A, B ≤ 100,000)

 

출력

 첫째 줄에 A@B의 결과를 출력한다.

 

소스코드
#include <iostream>
using namespace std;

int main() {
	
	long long int a, b;
	cin >> a >> b;

	long long int c = (a + b) * (a - b);

	cout << c;

	return 0;
}

(long long을 했는데도 불구하고 30점이 나오길래 무엇이 문제인지 생각했다. 알고보니, a와 b에만 long long int를 선언하고 c는 int형으로 둔 것이 문제였다. 다음엔 이런 실수를 하지 않도록 하자)


[참고자료]

16430. 유클리드 호제법, 최대공약수 구하는 법

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kmc7468&logNo=221017936040 

 

C++ - 최대공약수와 최소공배수 구하기

안녕하세요, static입니다. C++로 빠르게 최대공약수와 최소공배수를 구하는 방법을 알아보겠습니다.https...

blog.naver.com

'Language > C++' 카테고리의 다른 글

[C++_백준] 10828, 10845  (0) 2022.03.16
[C++_제 9장] 객체와 클래스  (0) 2022.03.10
[C++_백준] while문 (10952, 10951, 1110)  (0) 2022.02.08
[C++_백준] 16394, 15894  (0) 2022.02.04
[C++_백준] 3003, 5554, 5522  (0) 2022.02.03