본문 바로가기
알고리즘/SW Expert Academy

[SW Expert Academy 풀이/JAVA] 1289.원재의 메모리 복구하기

by krapoi 2021. 12. 23.
반응형

이번에 풀 문제는 1289번이다.

 

SW Expert Academy

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

swexpertacademy.com

 

문제부터 보도록 하자.

문제

원재가 컴퓨터를 만지다가 실수를 저지르고 말았다. 메모리가 초기화된 것이다.

다행히 원래 메모리가 무슨 값이었는지 알고 있었던 원재는 바로 원래 값으로 되돌리려고 했으나 메모리 값을 바꿀 때 또 문제가 생겼다.

메모리 bit 중 하나를 골라 0인지 1인지 결정하면 해당 값이 메모리의 끝까지 덮어 씌우는 것이다.

예를 들어 지금 메모리 값이 0100이고, 3번째 bit를 골라 1로 설정하면 0111이 된다.

원래 상태가 주어질 때 초기화 상태 (모든 bit가 0)에서 원래 상태로 돌아가는데 최소 몇 번이나 고쳐야 하는지 계산해보자.

 

음 아직 잘 떠오르지 않는 것 같다.

 

예제를 보자.

 

예제

입력
2
0011
100


출력
 
#1 1
#2 2
 
 
예제를 보니,
숫자가 다를때마다 count를 해서 print를 찍으면 될것 같다.
 
코드로 옮겨 보자.
 
public static int sum = 0;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int cnt = sc.nextInt();
        sc.nextLine();

        for(int i = 1; i <= cnt; i++){
            String m = sc.next();
            int n=0;                 // 횟수
            int size = m.length();

            if(m.startsWith("1"))
                n++;

            for(int j = 0; j < size -1; j++){
                if(m.charAt(j) != m.charAt(j+1)) {
                    n++;
                }
            }

            System.out.println("#" + i + " " + n);
        }
    }

당연히 이번에도 Scanner를 사용했다.

일단 초기에 0으로 시작을 하니, (문제에서, "원래 상태가 주어질 때 초기화 상태 (모든 bit가 0)"이라고 알려줬다. )

처음 수가 1이라면 횟수인 n을 증가시켜준다.

그다음 for문을 돌려서 지금 숫자가 다음 숫자와 같지 않다면, n을 증가시켜준다.

루프 문을 빠져나오면 바로 출력해준다.

 

이번에 푼 문제가 저번보다 난도가 높은 문제인 걸로 아는데

더 쉬운 것 같다.

반응형