본문 바로가기
Algorithm/Java

[SWEA] 1289. 원재의 메모리 복구하기 [D3]

by 코코형아 2024. 1. 29.

 

[문제 출처]

 

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV19AcoKI9sCFAZN

 

 

SW Expert Academy

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

swexpertacademy.com

[문제 설명]

 

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

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

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

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

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

[입력]

첫 번째 줄에 테스트 케이스의 수 T가 주어진다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 메모리의 원래 값이 주어진다.

메모리의 길이는 1이상 50이하이다.

[출력]

각 테스트 케이스마다 ‘#x’(x는 테스트케이스 번호를 의미하며 1부터 시작한다)를 출력하고,

초기값(모든bit가 0)에서 원래 값으로 복구하기 위한 최소 수정 횟수를 출력한다.

 

 

 

💡 Idea

  • 메모리 값을 변경하면 해당 값이 메모리의 끝까지 덮어 씌워진다.

=> 앞에서 부터 메모리값을 참조 한 후 변경되는 부분이 있으면 'check' 해준다.

 

public class SWEA_1289 {

	public static void main(String[] args) throws IOException{
		// 사용자로부터 입력받음
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		// 테스트케이스의 갯수
		int T = Integer.parseInt(br.readLine());
		for (int tc=1; tc<=T; tc++) {
			// temp 변수에 초기화값 '0' 담음
			char temp = '0';
			// 답 저장할 변수
			int ans = 0;
			// 라인단위로 입력받음
			String str = br.readLine();
			for (int i=0; i<str.length(); i++) {
				// temp 변수와 str문자열의 i번째 문자가 같을 경우
				if (str.charAt(i) != temp) {
					// temp 값 다시 설정
					temp = str.charAt(i);
					// 메모리 값 변경
					ans += 1;
				}
			}
			// 답 출력
			System.out.println("#" + tc + " " + ans);
		}
	}
}

 

 

<문제풀이 후기>

D3문제치고 쉬운 문제인 것 같다.

이렇게 풀면 되겠지...하고 풀면 풀리는 문제

'Algorithm > Java' 카테고리의 다른 글

[BOJ] 13335번 : 트럭 [S1]  (0) 2024.02.04
[BOJ] 15900 : 나무탈출 [S1]  (1) 2024.02.03
[BOJ] 11729 : 하노이 탑 이동순서 [G5]  (1) 2024.02.01
[BOJ] 1309 : 동물원 [S1]  (0) 2024.01.31
[BOJ] 17478 : 재귀함수가 뭔가요? [S5]  (0) 2024.01.29