본문 바로가기
알고리즘 PS/이것이 코딩 테스트다

[이코테][기출] 03. 문자열 뒤집기

by 백호루이 2022. 10. 18.
반응형

<문제 분석>

모든 숫자를 전부 같게 만드는 것이 목적이다. 따라서 전부 0으로 바꾸는 경우와 전부 1 바꾸는 경우 적은 횟수를 가지는 경우를 구하면 된다.

 

<풀이>

  1. 모두 0으로 만드는 경우
  2. 모두 1 만드는 경우
  3. 두번째 숫자부터 다음 숫자랑 비교를 해서 수가 달라지면 count 증가시킨다.

 

import java.util.Scanner;

// [이코테](그리디) 03. 문자열 뒤집기

public class Main {
    static int A[];
    static int count0 = 0; // 전부 0으로 바꾸는 경우
    static int count1 = 0; // 전부 1로 바꾸는 경우
    
    public void InputData() {
        Scanner sc = new Scanner(System.in);
        String s = sc.next();
        A = new int[s.length()];
        for (int i=0; i<s.length(); i++) {
            A[i] = s.charAt(i) - '0';
        }
    }

	public void Solve() {
        // 첫번째 원소에 대한 처리(!)
        if (A[0] == 1) {
            count0++;
        } else {
            count1++;
        }
        // 두번째 원소부터 모든 원소를 확인
        for (int i=1; i<A.length-1; i++) {
            if (A[i] != A[i+1]) { // 다음 원소가 다를 경우
                // 다음 수가 1이면 0으로 바뀐다.
                if (A[i+1] == 1) 
                    count0++;
                else // 다음 수가 0이면 1로 바뀐다.
                    count1++;
            }
        }
        System.out.println(Math.min(count0, count1));
	}
    
	public static void main (String[] args)
	{
		Main m = new Main();
		m.InputData();
        m.Solve();
	}
}
반응형

댓글