반응형
https://www.acmicpc.net/problem/13019
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 512 MB | 189 | 67 | 51 | 40.476% |
문제
문자열 A와 B가 주어진다. 한 번 문자열을 바꾸는 것은 A의 한 글자를 골라서 문자열의 가장 처음으로 옮기는 것을 의미한다.
A를 B로 바꾸기 위해서 문자열을 바꿔야 하는 횟수의 최솟값을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 A, 둘째 줄에 B가 주어진다. 두 문자열의 길이는 같으며, 길이는 50을 넘지 않는다. 또, 알파벳 대문자로만 이루어져 있다.
출력
첫째 줄에 A를 B로 바꾸는 연산 횟수의 최솟값을 출력한다. A를 B로 바꿀 수 없을 때는 -1을 출력한다.
예제 입력 1
ABC
CBA
예제 출력 1
2
예제 입력 2
A
B
예제 출력 2
-1
예제 입력 3
AAABBB
BBBAAA
예제 출력 3
3
예제 입력 4
A
A
예제 출력 4
0
예제 입력 5
DCABA
DACBA
예제 출력 5
2
코드
/*
A를 B로
Greedy + 구현
str1의 맨 뒤에서부터 한글자 씩 str2의 맨 앞에서부터 차례차례 탐색한다.
*/
import java.io.*;
public class p13019 {
static String str1, str2;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
str1 = br.readLine();
str2 = br.readLine();
int[] arr1 = new int[26];
int[] arr2 = new int[26];
int size = str1.length(), cnt = 0;
for (int i = 0; i < size; i++) {
arr1[str1.charAt(i) - 'A']++;
arr2[str2.charAt(i) - 'A']++;
}
for (int i = size - 1; i >= 0; i--) {
if (str1.charAt(i) == str2.charAt(size - 1 - cnt)) {
cnt++;
}
}
boolean flag = false;
for (int i = 0; i < 26; i++) {
if (arr1[i] != arr2[i]) {
flag = true;
break;
}
}
System.out.println(flag ? -1 : size - cnt);
}
}
반응형
'알고리즘 > [ Baekjoon ]' 카테고리의 다른 글
[ BOJ ][JAVA][4386] 별자리 만들기 (0) | 2021.05.25 |
---|---|
[ BOJ ][JAVA][14430] 자원 캐기 (0) | 2021.05.24 |
[ BOJ ][JAVA][11779] 최소비용 구하기 2 (0) | 2021.05.24 |
[ BOJ ][JAVA][11170] 0의 개수 (0) | 2021.05.24 |
[ BOJ ][JAVA][3187] 양치기 꿍 (0) | 2021.05.24 |