728x90
SMALL
백준 문제 풀이: 12971 (숫자 놀이)
문제 링크: https://www.acmicpc.net/problem/12971
문제 설명:
세 개의 주어진 나머지 조건을 만족하는 가장 작은 양의 정수를 찾는 문제입니다.
- i % p1 == x1
- i % p2 == x2
- i % p3 == x3
여기서 p1, p2, p3
는 각각의 나머지 연산의 모듈로 값입니다.
만약 조건을 만족하는 값이 존재하지 않으면 **-1**을 출력해야 합니다.
문제 해결 코드
#include <iostream>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int p1, p2, p3, x1, x2, x3; // 입력 값
cin >> p1 >> p2 >> p3 >> x1 >> x2 >> x3;
// 모든 가능한 값 i를 순회하면서 조건 검사
for (int i = 1; i <= p1 * p2 * p3; i++) {
if ((i % p1 == x1) && (i % p2 == x2) && (i % p3 == x3)) {
cout << i << '\n'; // 조건을 만족하는 가장 작은 값 출력
return 0;
}
}
// 조건을 만족하는 값이 없을 경우
cout << -1 << '\n';
return 0;
}
코드 설명
코드의 주요 로직과 사용된 알고리즘 설명:
- 브루트포스 탐색:
1부터
p1 × p2 × p3
까지 모든 값을 순회하며 조건을 만족하는지를 확인합니다. - 조건 검사:
각 값
i
에 대해 다음 조건이 모두 참인지 확인합니다:i % p1 == x1
i % p2 == x2
i % p3 == x3
- 최적화:
탐색 범위는 세 나머지의 최소 공배수인
p1 × p2 × p3
입니다. 이 범위 안에서 조건을 만족하는 값을 찾으면 바로 반환합니다.
시간 복잡도 분석
- 최대 탐색 범위는 **p1 × p2 × p3**입니다.
- 브루트포스로 모든 값을 확인하므로 시간 복잡도는 **O(p1 × p2 × p3)**입니다.
- 주어진 조건에서 입력이 작기 때문에 효율적으로 수행됩니다.
결과
주어진 조건을 만족하는 가장 작은 양의 정수를 출력합니다. 만약 조건을 만족하는 값이 없으면 -1을 출력합니다.
- 입력 예시:
3 5 7 2 4 6
- 출력 예시:
34
- 입력 예시:
3 5 7 1 2 3
- 출력 예시:
-1
다른 접근 방식이나 개선 사항이 있다면 댓글로 공유 부탁드립니다!
728x90
LIST
'BAEKJOON > 브루트포스' 카테고리의 다른 글
백준 2992번 [크면서 작은 수](C++) -yes6686- 티스토리 (0) | 2024.07.13 |
---|---|
백준 10819번 [차이를 최대로](C++) -yes6686- 티스토리 (0) | 2024.05.14 |
백준 2303번 [숫자 게임](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
백준 1027번 [고층 건물](C++) -yes6686- 티스토리 (0) | 2024.05.04 |
백준 1182번 [부분수열의 합](C++) -yes6686- 티스토리 (1) | 2024.01.23 |