컴굥일지

[BOJ/백준 13413][C++] 오셀로 재배치 본문

알고리즘/코테 문제

[BOJ/백준 13413][C++] 오셀로 재배치

gyong 2022. 3. 9. 21:02
반응형

문제

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

 

문제 내용

문자열 두 개를 입력받아서 한 문자열을 다른 문자열로 바꾸기 위해 몇 번의 연산이 필요한지 계산하면 된다.

이때 연산의 종류로는 2가지가 있다.

1. 배치된 말 중에 임의의 2개의 말을 골라 서로의 위치를 바꾼다
2. 말 1개를 들어 뒤집는다

 

문제 풀이

초기 상태와 목표 상태에서 서로 일치하지 않는 위치에서 w와 b의 개수를 구한다. (초기 상태 기준으로 구했다)

잘 생각해보면 따로 계산할 것이 없이 큰 값이 결괏값이 된다.

 

코드

#include <iostream>
#include <algorithm>
using namespace std;


int main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	//입력
	int testcase;
	cin >> testcase;

	for (int i = 0; i < testcase; i++) {
		int num; cin >> num; //글자수
		int w = 0, b = 0;
		string input, base;
		cin >> input >> base;
		
		for (int i = 0; i < num; i++) {
			if (input[i] == base[i]) continue;
			else {//글자가 다를 때
				if (input[i] == 'B') b++;
				else w++;				
			}
		}

		//문제 해결 및 결과 출력
		if (w > b) cout << w << '\n';
		else cout << b << '\n';
	}
}

 

반응형
Comments