본문 바로가기

# 프로그래밍 개발/04. 알고리즘 문제풀이

백준 알고리즘 10801번 카드게임 문제 풀이 코드 공개

반응형

문제

두 사람 A와 B는 1부터 10까지의 숫자가 하나씩 적힌 열 장의 카드로 ‘게임’을 한다. 게임은 총 열 번의 ‘라운드’로 구성되고, 각 라운드 마다 자신이 가지고 있는 카드 중 하나를 제시하고, 한 번 제시한 카드는 버린다. 게임 승패는 다음과 같이 결정된다. 

  1. 각 라운드는 더 높은 숫자를 제시한 사람이 승리하고, 제시한 숫자가 같은 경우는 비긴다. 
  2. 열 번의 라운드에서 더 많은 라운드를 승리한 사람이 게임을 승리하고, 승리한 라운드 횟수가 동일한 경우 비긴다. 

다음은 게임의 한 예로, 각 라운드마다 A와 B가 제시한 카드의 숫자와 각 라운드의 승자를 보여준다. (비긴 라운드는 D로 표시함)

A는 5번의 라운드에서 승리하고 B는 4번의 라운드에서 승리하였으므로, 이 게임은 A가 승리한다. 

라운드 순서대로 A와 B가 제시한 카드의 숫자가 주어졌을 때, 게임의 승자를 판단하는 프로그램을 작성하시오. 

입력

첫 번째 줄에는 A가 제시한 카드의 숫자 10개가 라운드 순서대로 주어지고, 두 번째 줄에는 B가 제시한 카드의 숫자 10개가 라운드 순서대로 주어진다.

출력

게임의 승패가 결정되는 경우 승리한 사람을 출력하고, 비기는 경우에는 D를 출력한다. 

출처

Olympiad > 한국정보올림피아드 > 한국정보올림피아드시․도지역본선 > 지역본선 2015 > 중등부 1번

  • 데이터를 만든 사람: baekjoon
  • 잘못된 데이터를 찾은 사람: tncks0121

알고리즘 분류

5년 전의 나... 

#include<stdio.h>
int main(){
	int a[10],b[10];
	int win_a = 0,win_b=0;
	for(int i = 0 ; i < 10 ; i++){
		scanf("%d",&a[i]);
	}
	for(int i = 0 ; i < 10 ; i++){
		scanf("%d",&b[i]);
	}
	for(int i = 0 ; i < 10 ; i++){
		if(a[i] > b[i])
			win_a++;
		else if(a[i] < b[i])
			win_b++;
	}
	if(win_a>win_b) printf("A\n");
	else if(win_a<win_b) printf("B\n");
	else printf("D\n");
}

코드를 이런식으로 짜다니.. 굉장한걸..? 

무슨 시도를 하고 싶었던 걸까 아마 코드 길이(바이트 수)가 다른 문제들에 비해 짧은 것을 보니 

저것을 줄이고 싶었던 것 같다. 

 

현업에서 이런식으로 짜면 싸우자는 걸로 인지하면 됩니다. 

반응형