카테고리 없음

[BOJ_1439/JAVA] 뒤집기

Eun 2022. 1. 23. 13:53

풀이

0을 뒤집는 경우와 1을 뒤집는 경우 두가지를 비교해서 더 적은 수를 출력하도록 하였다.

처음에 배열의 0번째 값을 가져와서 a에 저장하고, 계속해서 뒤에 숫자와 비교를 한다.

숫자가 같으면 넘어가고 숫자가 다르면 num[i]가 0이면 zero++, 1이면 one++ 를 해주고 a에 num[i]를 넣어준다. 

for문을 다 돌고나면 배열의 마지막 숫자는 비교하지 못하고 끝이난다.

마지막 숫자도 마찬가지로 1인지 0인지 판단하여 ++을 해준다.

코드

package Week08;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class NDB_문자열뒤집기 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String s = br.readLine();
		int num[]=new int[s.length()];
		
		for(int i=0;i<s.length();i++) {
			num[i]=s.charAt(i)-'0';
		}
		
		int one=0;
		int zero=0;
		
		int a = num[0]; // 배열의 첫번째 인덱스값 저장
		
		for(int i=1;i<num.length;i++) {
			if(num[i]!= a) {	// a와 다른 경우
				if(a==0) {
					zero++;		// 0이면 ++
					a=num[i];	// a를 0으로 갱신해준다.
				}else {		
					one++;		// 1이면 ++
					a=num[i];	// a를 1으로 갱신해준다.
				}
			}
		}
		
        // 마지막 배열은 비교못하고 끝나므로 한번 더 체크해준다.
		if(a==0) zero++;		
		else one++;
		
        // 0이 연속한 개수와 1이 연속한 개수 중 최솟값 출력
		System.out.println(Math.min(zero, one));

	}

}