반응형

문제 출처 :


https://www.acmicpc.net/problem/14582



알고리즘 분석 :


문제 해결에 필요한 사항

1. 구현


이 문제를 접근하기위해 a와 b에 대한 전제를 알아보면 다음과 같다.


b는 무조건 a에게 이기게 되어있다.(역전을 하던 그냥 이기던)


위의 사실을 이용해보면 a는 1회부터 시작해서 9회에 종료, b는 2회부터 시작해서 10회에 종료한다고 생각해 볼 수 있다.


이렇게 구성한다면 a와 b의 총 점수인 sa와 sb를 비교할 수 있게 된다.


a팀이 점수가 높은 경우에는 win이 true가 되고, 역전의 개념을 가진 rev는 false가 된다.


b팀이 점수가 높은 경우에는 2가지 경우로 나뉘는데 a가 이미 이기고 있던 경우에는 

역전 당했으니 rev = true가 되고 win = false가 된다.


a팀이 이미 지고 있었다면 win = false가 되고 역전 여부인 rev는 true인지 false인지 알 수 없다.(이전 값을 그대로 따른다.)



소스 코드 : 


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
#include <iostream>
#include <cstdio>
 
using namespace std;
 
int a[11], sa[11];
int b[11], sb[11];
int main()
{
    for (int i = 1; i <= 9; i++)
    {
        scanf("%d"&a[i]);
        sa[i] = a[i] + sa[i - 1];
    }
 
    for (int i = 2; i <= 10; i++)
    {
        scanf("%d"&b[i]);
        sb[i] = b[i] + sb[i - 1];
    }
 
    bool win = false;
    bool rev = false;
    for (int i = 1; i <= 10; i++)
    {
        // a팀이 점수가 높은 경우
        if (sa[i] > sb[i])
        {
            win = true;
            rev = false;
        }
 
        // b팀이 점수가 높은 경우
        else if (sa[i] < sb[i])
        {
            // a팀이 이기고 있었을 때
            if (win)
            {
                rev = true;
                win = false;
            }
 
            // a팀이 지고 있었을 때
            else
                win = false;            
        }
    }
 
    rev ? printf("Yes") : printf("No");
 
    return 0;
}
 
//                                                       This source code Copyright belongs to Crocus
//                                                        If you want to see more? click here >>
Crocus


반응형

'Applied > 알고리즘 문제풀이' 카테고리의 다른 글

[SwExpertAcademy] 평등주의  (0) 2019.06.04
[Codeground 11번] 개구리 뛰기  (0) 2019.06.03
[1259번] 금속막대  (0) 2019.05.31
[4번] Median of Two Sorted Arrays  (0) 2019.05.31
[SwExpertAcademy] 롤러코스터  (0) 2019.05.29