-
[Java] BOJ 1522 문자열 교환개발자 취업/코딩테스트 준비 2023. 4. 26. 09:48반응형
1522번: 문자열 교환
a와 b로만 이루어진 문자열이 주어질 때, a를 모두 연속으로 만들기 위해서 필요한 교환의 회수를 최소로 하는 프로그램을 작성하시오. 이 문자열은 원형이기 때문에, 처음과 끝은 서로 인접해
www.acmicpc.net
정답 코드
- a와 b로 만들 수 있는 모든 연속 문자열 set에 저장하기
- 연속 문자열 순회하면서 문자 차이 구하기
import java.io.*; import java.util.*; public class Main { static BufferedReader br; static BufferedWriter bw; static StringTokenizer st; static String str; static int[] arr; static Set<String> set; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); str = br.readLine(); arr = new int[2]; for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (c == 'a') { arr[0]++; } else { arr[1]++; } } set = new HashSet<>(); for (int i = 0; i <= arr[0]; i++) { StringBuilder sb = new StringBuilder(); for (int j = i; j < arr[0]; j++) { sb.append('a'); } for (int j = 0; j < arr[1]; j++) { sb.append('b'); } for (int j = 0; j < i; j++) { sb.append('a'); } set.add(sb.toString()); } for (int i = 0; i <= arr[1]; i++) { StringBuilder sb = new StringBuilder(); for (int j = i; j < arr[1]; j++) { sb.append('b'); } for (int j = 0; j < arr[0]; j++) { sb.append('a'); } for (int j = 0; j < i; j++) { sb.append('b'); } set.add(sb.toString()); } int min = Integer.MAX_VALUE; for (String s : set) { int diff = 0; for (int i = 0; i < s.length(); i++) { if (s.charAt(i) != str.charAt(i)) { diff++; } } min = Math.min(diff, min); } System.out.println(min / 2); } }
'개발자 취업 > 코딩테스트 준비' 카테고리의 다른 글
[Java] BOJ 14888 연산자 끼워넣기 (0) 2023.05.01 [Java] BOJ 2217 로프 (0) 2023.04.28 [Java] BOJ 1986 체스 (1) 2023.04.27 [Java] BOJ 1406 에디터 (0) 2023.04.25 [Java] BOJ 14426 접두사 찾기 (1) 2023.04.25