[BOJ 1499] 뒤집기 수열
View as PDF
Submit solution
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text
Points:
3
Time limit:
2.0s
Memory limit:
128M
Problem types
Allowed languages
세준이는 어떤 문자열의 부분 문자열을 뒤집는 연산을 할 수 있다. r(i,j)는 어떤 문자열의 I번부터 j번 문자열 까지를 뒤집는 연산이다. (0번부터 시작한다.)</p>
어떤 문자열 A를 B로 바꾸는데 사용할 수 있는 연산은 r(i,j)만 있는데, 이 연산을 사용한 순서대로 나타낸 걸 뒤집기 수열이라고 한다.
뒤집기 수열은 다음 조건을 만족해야 한다. 뒤집기 수열이 다음과 같이 길이가 m이고 수열의 각 원소가 첫 번째 부터 r(i1,j1), r(i2,j2), ... r(im,jm) 이라면, i1 ≤ i2 ≤ ... ≤ im이고, j1 ≥ j2 ≥ ... ≥ jm인 조건을 만족해야 한다.
문자열 A와 B가 주어졌을 때, A를 B로 바꾸기 위한 뒤집기 연산의 최소 회수를 출력하는 프로그램을 작성하시오.
예를 들어 A = 1100이고, B=0110이면, r(0,2)를 이용하면 0110을 만들 수 있다.
입력 형식
첫째 줄에 문자열 A와 둘째 줄에 문자열 B가 주어진다. A와 B의 길이는 50보다 작거나 같고, 두 문자열의 길이는 같다. 또, 0과 1로만 이루어져 있다.
출력 형식
첫째 줄에 최소 회수를 출력한다. 만약 바꿀 수 없으면 -1을 출력한다.
예제 입력 1
1100
0110
예제 출력 1
1
예제 입력 2
111000
101010
예제 출력 2
2
예제 입력 3
0
1
예제 출력 3
-1
예제 입력 4
10101
10101
예제 출력 4
0
예제 입력 5
111000111000
001100110011
예제 출력 5
4
Comments