[JAVA] SWEA 1289 원재의 메모리 복구하기
반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV19AcoKI9sCFAZN
1. 서론
그다지 어렵지 않은 배열을 가지고 노는 문제다.
2. 문제 풀이
어떤 배열이 주어진다. 그리고 그 배열과 같은 사이즈의 모든 값이 0인 배열을 주어진 배열과 같게 만드는 것이 문제이다.
그 방법은 배열의 어떤 인덱스를 선택했을 때 그 인덱스부터 배열의 끝 값까지 모두 값을 같은 값으로 바꿔주는 것이다.(0이나 1중에서 하나로)
나는 두 배열을 0부터 비교하면서 서로 값이 다르면 그 뒤부터 원래 배열의 값으로 전부 바꿔주게 했다. 그리고 이 작업을 반복할 때마다 카운트를 했고 두 배열의 값이 같아질 때까지 반복했다.
3. 코드 설명
import java.util.*;
class Solution {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int t = s.nextInt();
for (int k = 0; k < t; k++) {
String str = s.next();
//메모리값 입력
int[] a = new int[str.length()];
for (int i = 0; i < str.length(); i++)
a[i] = str.charAt(i) - '0';
//초기화된 값
int[] x = new int[str.length()];
Arrays.fill(x, 0);
//값이 다르면 같을 때까지 중간에 값을 바꾸면서 반복
int i = 0, cnt = 0;
while(i < a.length) {
if (a[i] != x[i]) {
for (int j = i; j < a.length; j++) {
x[j] = a[i];
}
cnt++;
}
if (a.equals(x))
break;
i++;
}
System.out.println("#" + (k + 1) + " " + cnt);
}
}
}
위에서 설명한 것과 같은 로직이다. 다만 배열이 숫자인데 공백없이 주어져서 그냥 문자열로 받아서 값을 처리했다. 근데 어차피 0 아니면 1이니까 그냥 int로 안 바꾸고 char이나 string인 채로 풀어도 상관없을 것 같다. 근데 아직 자바에서 String 다루는 게 익숙지가 않아서... ㅎㅎ
반응형
'Algorithm' 카테고리의 다른 글
[JAVA] 백준 17413 단어 뒤집기 2 (0) | 2022.08.07 |
---|---|
[JAVA] 백준 2578 빙고 (0) | 2022.08.04 |
[JAVA] 백준 1244 스위치 켜고 끄기 (0) | 2022.08.02 |
[JAVA] SWEA 1974 스도쿠 검증 (2) | 2022.07.11 |
[JAVA] SWEA 1961 숫자 배열 회전 (0) | 2022.07.09 |