※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 14717번 문제인 앉았다이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/14717
14717번: 앉았다
영학이의 패를 뜻하는 두 개의 정수 A, B가 주어진다. (1 ≤ A, B ≤ 10)
www.acmicpc.net
영학이가 들고 있는 패를 제외한 카드들 중 두 카드를 뽑을 경우의 수와 그 경우 중 영학이가 이기는 경우의 수를 구해 문제를 해결할 수 있다. 이 과정에서 같은 수가 적혀있는 두 카드는 서로 다른 카드로 생각해야 함에 유의하자.
두 카드쌍 사이에서 어느 한 카드쌍이 이기는지 판단하는 방법 중 하나는 (1) 두 쌍 모두가 땡인지 (2) 한 쌍만 땡인지 (3) 두 쌍 모두가 끗인지로 경우를 나누어 생각하는 것이다. 각 경우 영학이의 패가 이기는지를 판단해 경우의 수를 세어주자.
아래는 제출한 소스코드이다.
#include <iostream>
using namespace std;
int card[20] = { 1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10 };
int visited[20];
int X, Y;
int cnt, total;
bool comp(int x, int y) {
if (X == Y && x == y) return X > x;
if (X == Y) return 1;
if (x == y) return 0;
return (X + Y) % 10 > (x + y) % 10;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> X >> Y;
visited[X * 2 - 2] = visited[Y * 2 - 1] = 1;
for (int i = 0; i < 20; i++) {
if (visited[i]) continue;
for (int j = i + 1; j < 20; j++) {
if (visited[j]) continue;
total++;
if (comp(card[i], card[j])) cnt++;
}
}
cout << fixed;
cout.precision(3);
cout << (double)cnt / total;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 16900 // C++] 이름 정하기 (0) | 2023.12.16 |
---|---|
[BOJ 14718 // C++] 용감한 용사 진수 (0) | 2023.12.15 |
[BOJ 14716 // C++] 현수막 (0) | 2023.12.13 |
[BOJ 28353 // C++] 고양이 카페 (0) | 2023.12.12 |
[BOJ 10193 // C++] Word Swap (1) | 2023.12.11 |