티스토리 뷰

PS/Problem_Solving

[Inflearn] 카드게임

Aaron 2020. 4. 21. 15:04
반응형


#. Problem

* The copyright in this matter is in Inflearn


#. Resolution Process

  1. Read and understand problem

  2. Redefine the problem + abstract

     - 공개된 숫자가 더 큰 사람이 승

     - 승자 : 3점, 패자 : 0점, 비김 : 1점

     - 마지막에 승점이 높은 사람이 승리하는데, 승점이 같을 경우 제일 마지막에 이긴 사람을 승자로

  3. Create solution plan (select Algorithm, Data structure)

  4. Prove the plan (check performance time and usage memory)

  5. Carry out the plan

  6. Look back on the plan and find a way to improve it


#. Solve

  1. 우선 카드를 저장한 배열 A, B와 A, B 의 승점을 누적할 변수가 필요하다.

     10회 게임을 진행하면서 카드의 대소를 비교한다. 이기는 사람에게 3점, 비기면 각각에게 1점을 부여한다.

     그러고 최종으로 승점을 비교해보자. 승점이 같다면? 마지막에 이긴 사람을 승자로. 해도 승부가 안 난다면? 무승부

  2. 

  3. 


#. Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <cstdio>
 
int A[10], B[10];
char rst[10];
 
int main(void)
{
    freopen("input.txt""rt", stdin);
    int i, scrA = 0, scrB = 0;
 
    for (i = 0; i < 10; i++)
        scanf("%d"&A[i]);
 
    for (i = 0; i < 10; i++)
        scanf("%d"&B[i]);
    
    for (i = 0; i < 10; i++)
    {
        if (A[i] > B[i])
        {
            scrA += 3;
            rst[i] = 'A';
        }
        else if (A[i] < B[i])
        {
            scrB += 3;
            rst[i] = 'B';
        }
        else
        {
            scrA++;
            scrB++;
            rst[i] = 'D';
        }
    }
 
    printf("%d %d\n", scrA, scrB);
 
    if (scrA > scrB)
        printf("A\n");
    else if (scrA < scrB)
        printf("B\n");
    else
    {
        for (i = 9; i >= 0; i--)
        {
            if (rst[i] == 'A' || rst[i] == 'B')
            {
                printf("%c\n", rst[i]);
                break;
            }
        }
 
        if (i < 0)
            printf("D\n");
    }
 
    return 0;
}
cs

너무 주먹구구식으로 짠 듯한 느낌이 드는데..


#. Other code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>        
    
int main(){
    int i, A[10], B[10], as=0, bs=0, lw=0;
 
    for(i=0; i<10; i++){
        scanf("%d"&A[i]);
    }
 
    for(i=0; i<10; i++){
        scanf("%d"&B[i]);
    }
 
    for(i=0; i<10; i++){
        if(A[i]>B[i]){
            as=as+3;
            lw=1;
        }
        else if(A[i]<B[i]){
            bs=bs+3;
            lw=2;
        }
        else{
            as+=1;
            bs+=1;
        }
    }
 
    printf("%d %d\n", as, bs);
 
    if(as==bs){
        if(lw==0printf("D\n");
        else if(lw==1printf("A\n");
        else printf("B\n");
    }
    else if(as>bs) printf("A\n");
    else printf("B\n");            
 
    return 0;
}
cs

lastWin int 형 변수를 사용해서 마지막 승자를 구해주면 됐었는데 나는 결과를 담는 배열을 또 따로 만들어줬다..

이렇게 하기 전에 같은 방법으로 하긴 했었지만 초기화를 0으로 안 둬서 결과값이 계속 이상하길래 배열로 했는데,

초기값을 이상하게 해둬서 발생된 결과였다..


변수의 초기값을 잘 확인하고 변수명도 짧고 센스있게 지어봐야겠다.


#. Result

  - Input --------------------------------------------------------

4 5 6 7 0 1 2 3 9 8 

1 2 3 4 5 6 7 8 9 0

------------------------------------------------------------------


  - Output --------------------------------------------------------

16 13

A

------------------------------------------------------------------



반응형

'PS > Problem_Solving' 카테고리의 다른 글

[Inflearn] Jolly Jumpers  (0) 2020.04.22
[Inflearn] 온도의 최댓값(1차원 배열 구간합)  (0) 2020.04.21
[Inflearn] 가위 바위 보  (0) 2020.04.21
[Inflearn] 분노 유발자  (0) 2020.04.21
[Inflearn] 층간소음  (0) 2020.04.21
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday