Algorithm

[Algorithm/Java][BOJ] 1439번 뒤집기

kkmin223 2022. 1. 16. 14:56
반응형

[BOJ] 1439번 뒤집기

https://www.acmicpc.net/problem/1439

문제접근

0이 같이 있는 그룹과 1이 같이 있는 그룹이 몇 그룹인지 세면 된다고 생각해서 처음에는 0에서 1로 바뀌는 부분에서 cnt에 +1을 해준다고 생각했다. 이렇게 하면 모든 그룹을 다 세기 때문에 오답이 되었다. 그래서 zeroGroup과 oneGroup을 이용해서 각자 따로따로 하나씩 세서 더 작은 값을 출력해 주었다. 하지만 마지막 부분에 있는 그룹은 처음 로직으로는 카운트가 안되서 for문 마지막일 때 현재 cur값의 group에 +1을 해주었다.

Code

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        char prev = input.charAt(0);
        int zeroGruop = 0, oneGroup = 0; // 각각 그룹을 나누어 카운팅
        for(int i=1; i<input.length(); i++){
            char cur = input.charAt(i);
            if(prev != cur){
                // 현재 값과 이전 값이 다르면 이전 값의 그룹의 +1
                if(prev == '0')
                    zeroGruop++;
                else
                    oneGroup++;
            }
            if(i==input.length()-1){
                // 마지막 인덱스에 속한 그룹도 +1을 해주기 위해서 추가
                if(cur == '0')
                    zeroGruop++;
                else
                    oneGroup++;
            }
            prev = cur;
        }
        // 두 그룹 중 최소값을 가진 그룹 출력
        System.out.println(Math.min(zeroGruop, oneGroup));
    }
}

어려웠던 점/ 배운 점

이제 자바 문법에 익숙해져서 어떤 라이브러리를 써야할 지 느낌이 오고 String에 있는 메소드도 적응이 된 것 같다.
BOJ는 프로그래머스나 LeetCode 처럼 좋아요를 많이 받은 코드를 따로 볼 수 없는 것 같아서 다른 사람들이 어떻게 풀었을지 궁금하다.

반응형