※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 25494번 문제인 단순한 문제 (Small)이다.
문제는 아래 링크를 확인하자.

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

 

25494번: 단순한 문제 (Small)

세 양의 정수 $a$, $b$, $c$가 주어질 때, 다음 조건을 만족하는 정수 쌍 $(x, y, z)$의 개수를 구하시오. $1 \le x \le a$ $1 \le y \le b$ $1 \le z \le c$ $(x\,\bmod\,y) = (y\,\bmod\,z) = (z\,\bmod\,x)$ $(A\,\bmod\,B)$는 $A$를 $B$

www.acmicpc.net

1 이상 a 이하의 모든 가능한 x, 1 이상 b 이하의 모든 가능한 y, 1 이상 c 이하의 모든 가능한 z에 대하여 각각 x mod y와 y mod z, z mod x를 직접 계산해 조건에 맞는 정수 쌍의 개수를 세어 문제를 해결하자. 즉, 모든 가능한 경우의 수에 대하여 x mod y, y mod z, z mod x를 직접 계산해 경우의 수를 직접 세는 것으로 문제를 해결하자. 이는 삼중 반복문을 이용하여 쉽게 구현할 수 있다.

 

더 높은 효율의 풀이는 25487번 문제의 풀이를 참고하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	int T; cin >> T;
	while (T--) {
		int cnt = 0;
		int a, b, c; cin >> a >> b >> c;
		for (int x = 1; x <= a; x++) {
			for (int y = 1; y <= b; y++) {
				for (int z = 1; z <= c; z++) {
					int X = x % y, Y = y % z, Z = z % x;
					if (X == Y && Y == Z) cnt++;
				}
			}
		}

		cout << cnt << '\n';
	}
}
728x90

+ Recent posts