<링크>

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


<소스코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
int main()
{
    char c1[100001], c2[100001];
    int T;
    scanf("%d"&T);
    while (T--)
    {
        int N; scanf("%d"&N);
        scanf("%s", c1);
        scanf("%s", c2);
        int wbCnt=0, bwCnt = 0;
        for (int i = 0; i < N; ++i)
        {
            if (c1[i] == 'W' && c2[i] == 'B')
                ++wbCnt;
            else if (c1[i] == 'B' && c2[i] == 'W')
                ++bwCnt;
        }
        printf("%d\n", wbCnt < bwCnt ? bwCnt : wbCnt);
    }
}
cs


<풀이>

백말(W)은 O, 흑말(B)는 X로 표시하면

OXOX

XOXO

이런식으로 되어있을 때, 즉

O      X

X 와  O  가 엇갈려있을 때 바꿔주면 된다.


따라서 

O

X


X

O

의 개수를 각각 세어서 1번연산을 이용해 한쌍으로 매칭시켜주면 된다.

그 후 다 매칭시키고 나서 더이상 짝지어줄 수 있는 애들이 없으면 그냥 2번 연산을 이용해 바꾼다.


ex)

OXOOXX

XOXOOO


굵은애들은 윗라인 애들을 1번연산으로 맞바꿔주면 된다.

빨간애는 남은 나가리인데 걔는 2번연산으로 바꿔주면된다.

'알고리즘 풀이 > 기타' 카테고리의 다른 글

백준 2621 카드게임  (0) 2018.08.28
백준 13414 수강신청  (0) 2018.08.02
백준 10973 이전 순열  (0) 2018.07.24
백준 10972 다음 순열  (1) 2018.07.24
백준 2725 보이는 점의 개수:: 들짐승  (0) 2018.07.22

+ Recent posts