본문 바로가기
프로그램/C언어 1000제

C언어 157제] 2010년 한국정보올림피아드 지역본선 초등부 2번 주사위 게임

by 건티 2024. 8. 16.
728x90

출처 : 반크_세계유산 창덕궁

 

문제]

1에서부터 6까지의 눈을 가진 3개의 주사위를 던져서 다음과 같은 규칙에 따라 상금을 받는 게임이 있다.

같은 눈이 3개가 나오면 10,000원+(같은 눈)×1,000원의 상금을 받게 된다. 
같은 눈이 2개만 나오는 경우에는 1,000원+(같은 눈)×100원의 상금을 받게 된다. 
모두 다른 눈이 나오는 경우에는 (그 중 가장 큰 눈)×100원의 상금을 받게 된다.  
예를 들어, 3개의 눈 3, 3, 6이 주어지면 상금은 1,000+3×100으로 계산되어 1,300원을 받게 된다.

또 3개의 눈이 2, 2, 2로 주어지면 10,000+2×1,000 으로 계산되어 12,000원을 받게 된다.

3개의 눈이 6, 2, 5로 주어지면 그 중 가장 큰 값이 6이므로 6×100으로 계산되어 600원을 상금으로 받게 된다.

N(2 ≤ N ≤ 1,000)명이 주사위 게임에 참여하였을 때, 가장 많은 상금을 받은 사람의 상금을 출력하는 프로그램을 작성하시오.

입력
첫째 줄에는 참여하는 사람 수 N이 주어지고 그 다음 줄부터 N개의 줄에 사람들이 주사위를 던진 3개의 눈이 빈칸을 사이에 두고 각각 주어진다. 

출력
첫째 줄에 가장 많은 상금을 받은 사람의 상금을 출력한다.

예제 입력 1 
3
3 3 6
2 2 2
6 2 5
예제 출력 1 
12000

출처 : 백준_2476번

 

참고풀이]

#include <stdio.h>
#include <stdlib.h> //malloc(), free()

int main()
{
   int N;//참여한 사람 수 변수 
   int r,c;//행열 인덱스 또는 반복변수 
   int chk;//체크 또는 최대값 변수 

   //참여한 사람 수를 입력받는다.
   while(1)
   {
      scanf("%d",&N);
      if(N>=2 && N<=1000) break;
      return 0;
   }

   //참여한 사람 수 만큼의 주사위 3개의 수 입력.
   //참여한 사람 수 만큼의 동적배열 선언 
   int **M=(int **) malloc(sizeof(int *)*N);
   for(r=0; r<N; r++)
   {
      //3개의 주사위 값과 상금을 구할 열방을 선언하고 값을 넣는다. 
      M[r]=(int *)malloc(sizeof(int)*4);
      scanf("%d%d%d",&M[r][0],&M[r][1],&M[r][2]);
      chk=0;
      if(M[r][0]>=1 && M[r][0]<=6)
         if(M[r][1]>=1 && M[r][1]<=6)
            if(M[r][2]>=1 && M[r][2]<=6)
               chk=1;
      if(!chk) return 0;
      M[r][3]=0;
   }

   //가장 많은 상금을 받은 사람을 구하여 출력한다.
   for(r=0;r<N;r++) 
   {
      if(M[r][0]==M[r][1] && M[r][1]==M[r][2]) 
         M[r][3]=10000+M[r][0]*1000;
      else if(M[r][0]==M[r][1] && M[r][1]!=M[r][2]) 
         M[r][3]=1000+M[r][0]*100;
      else if(M[r][0]!=M[r][1] && M[r][1]==M[r][2]) 
         M[r][3]=1000+M[r][1]*100;
      else
      {
         chk=M[r][0];
         for(c=1;c<3;c++)
            if(chk<M[r][c]) chk=M[r][c];
         M[r][3]=chk*100;
      }
   }

   chk=M[0][3];
   for(r=1;r<N;r++)
      if(chk<M[r][3]) chk=M[r][3];

   printf("%d",chk);

   //동적메모리 열행 해제
   for(r=0;r<N;r++) 
      free(M[r]);
   free(M);

   return 0;
}

 

참고풀이 결과]

 

 

 

 

 

대한민국의 아름다운 영토, 독도

 

반응형

댓글