[SWEA 1289] 원재의 메모리 복구하기
업데이트:
문제
- SWEA 1289번
- 문제의 저작권은 SW Expert Academy에 있습니다.
접근방식
0000과 원래 입력한 값 num을 비교해줘야 한다.
이때, 한글자씩 비교해줘야 하므로 처음 num을 입력받을 때 String으로 입력받은 후 charAt()을 이용해 한글자씩 배열array_num에 담는다. 배열을 하나 더 생성하여 array_before는 num의 길이만큼 0으로 초기화 되어있다.
그리고 array_num[i]과 array_before[i]을 0에서 부터 하나씩 비교해주면서 서로 숫자가 다른 경우에 array_before[i]를 array_num[j]에 넣어준다. 이때 i부터 끝까지 변경된다고 문제게 적혀있으므로 j=i부터 j<num.length까지 값을 변경해준다. 그리고 변경할 때만 count를 하나씩 증가시킨다.
모든 for문을 순환한 뒤 count를 출력시키면 최소 수정 횟수가 출력된다.
코드
package swea;
import java.util.Scanner;
public class Swea_1289 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int tc = 0; tc < T; tc++) {
String num = sc.next(); // 정수 입력
int[] array_before = new int[num.length()];
int[] array_num = new int[num.length()]; // 한문자씩 입력
for (int i = 0; i < num.length(); i++) {
array_num[i] = num.charAt(i) - 48;
}
int count = 0;
boolean flag = false;
for (int i = 0; i < num.length(); i++) {
// 서로 숫자가 다르다면
if (array_before[i] != array_num[i]) {
count++;
// 해당위치부터 끝까지 원래 값 넣어줌
for (int j = i; j < num.length(); j++) {
array_before[j] = array_num[i];
}
}
}
System.out.println("#" + (tc + 1) + " " + count);
}
}
}