[JAVA] SWEA 1289 원재의 메모리 복구하기
2022. 8. 2.
반응형

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV19AcoKI9sCFAZN 

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

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
myoskin