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

 

이번에 볼 문제는 백준 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

+ Recent posts