알고리즘/SWAE

[SW Expert] (D3) 원재의 메모리 복구하기

황성안 2021. 2. 5. 23:26
728x90

원재씨가 실수로 메모리를 초기화했다. 

다행이 원래 메모리가 무슨 값이였는지 알고있다고한다.

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

ex)

0 1 0 0

                   ^ 이 3번재 bit를 골라 1로 설정하면 

0 1 1 1

이렇게 그자리부터 1로 덮어씌워지는 것.

 그렇다면 원래상태가 주어 질때 초기화 상태에서 원래 상태로 돌아가는데 최소 몇 번이나 고쳐야 하는지 계산해보아라.

 ex)  값이 주어진다.

? ? ? ?

이 값이 아래로 초기화 - (1)

0 0 0 0

그리고 원래 상태로 - (2)

 

 

문제 풀이 

기본 - tc 값

1. 값을 주어줄 필요없이 메모리의 길이가 들어갈 배열을 만들어준다.

2. 0000에서 > 입력값으로 변겅하기 

3. 1을 검색하고 바꾸고 0을 검색하고 바꾸고를 메모리 길이가 들어갈 배열을 반복 수행

 

소스코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class Solution{
 
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int T = Integer.parseInt(br.readLine()); // Tc 받아주기
        int cnt;
        char point;
        
        for(int tc = 1; tc <= T; tc++) {
            String s = br.readLine(); // 현재 값 받기
            point = '0'// 초기화 시켜줄 값
            cnt = 0;//초기화 > 원래값 변경하는 횟수
            for(int i = 0; i < s.length(); i++) {
                if(point != s.charAt(i)) {//s의 i번째 문자가 point 값이 아니라면
                    cnt++// cnt 회수 추가
                    point = s.charAt(i); // s의 i번째 문자를 point으로 값을 줍니다.
                }
            }
            sb.append("#"+tc+ " "+ cnt+ "\n");
        }
        sb.setLength(sb.length()-1); //sb 길이를 sb길이의 -1 만큼 설정!
        System.out.println(sb);
    }
 
}
 
cs
728x90