※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 26075번 문제인 곰곰아 선 넘지마이다.
문제는 아래 링크를 확인하자.
https://www.acmicpc.net/problem/26075
26075번: 곰곰아 선 넘지마
1001, 0110 둘 다 가능한 모습이다. 1010 으로 만드는 경우, S 는 1번, T 는 3번의 연산을 수행해서 총 1+9=10 의 비용이 소모된다.
www.acmicpc.net
한 문자열을 다른 문자열로 바꾸는 데에 필요한 연산의 최소 횟수를 구하고, 그 연산과정의 절반(필요한 연산의 개수가 홀수인 경우 1차이는 날 수 있다)을 역순으로 목표문자열에 적용하는 것으로 두 문자열에 각각 적용한 연산 횟수의 제곱의 합을 최소화할 수 있다.
한 문자열을 다른 문자열로 바꾸는 데에 필요한 연산의 최소 횟수는 두 문자열의 k번째 1의 위치를 맞춰주는 데에 필요한 횟수, 즉 두 문자열의 k번째 1의 인덱스의 차들을 합하는 것으로 계산할수 있다
아래는 제출한 소스코드이다.
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
ll N, M;
string s1, s2;
ll cnt = 0;
int arr[100000];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> s1 >> s2;
int i = 0;
for (int ii = 0; ii < N + M; ii++) {
if (s1[ii] == '1') arr[i++] = ii;
}
i = 0;
for (int ii = 0; ii < N + M; ii++) {
if (s2[ii] == '1') cnt += abs(ii - arr[i++]);
}
cout << (cnt / 2) * (cnt / 2) + (cnt - cnt / 2) * (cnt - cnt / 2);
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 26077 // C++] 서커스 나이트 (0) | 2022.12.02 |
---|---|
[BOJ 25814 // C++] Heavy Numbers (1) | 2022.12.02 |
[BOJ 2171 // C++] 직사각형의 개수 (0) | 2022.12.02 |
[BOJ 26076 // C++] 곰곰이의 식단 관리 2 (0) | 2022.12.02 |
[BOJ 26073 // C++] 외로운 곰곰이는 친구가 있어요 (0) | 2022.12.02 |