백준 7567, 밥그릇 쌓기

95qwer·2022년 5월 12일
0

총 경우의 수 4가지에 대해 생각하였습니다.

정상 상태의 밥그릇: '('
엎어진 상태의 밥그릇 : ')'

1) 이전 밥그릇은 정상, 쌓을 밥그릇이 엎어진 상태
2) 이전 밥그릇도 정상, 쌓을 밥그릇도 정상
3) 이전 밥그릇은 엎어짐, 쌓을 밥그릇은 정상
4) 이전 밥그릇도 엎어졌고, 쌓을 밥그릇도 엎어짐.

엎어진 상태는 boolean으로 나타낼 수 있습니다.
입력받은 배열을 for 문으로 돌며 상태를 확인하고, 이전 상태와 현재 상태에 따라 높이를 증가시키고, 이전 상태를 나타내는 boolean을 업데이트 합니다.

첫 밥공기에 대한 상태를 업데이트 후, for 문으로 들어갑니다.

코드 참고)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
		char[] input = bfr.readLine().toCharArray();
		int inputLength = input.length;
		int height = 10; // 기본 높이 10
		boolean direction;
		direction = input[0] == '(' ? true : false; //첫 밥공기가 정상적이면 true, 엎어져 있으면 false
		for (int i = 1; i < inputLength; i++) {
			if (direction && input[i] == ')') {//이전 밥 공기가 정상적이고, 쌓으려는 밥 공기가 엎어져 있으면,
				height += 10;
				direction = false;//
			} else if(direction && input[i] == '('){//이전 밥 공기도 정상, 쌓으려는 밥 공기도 정상적이면
				height += 5;
				direction = true;
			} else if(!direction && input[i] =='('){ //이전 밥 공기 엎어짐, 쌓으려는 밥 공기가 정상적
				height += 10;
				direction = true;
			} else { // 이전 밥 공기 엎어짐, 쌓으려는 밥 공기도 엎어짐.
				height += 5;
				direction = false;
			}
		}
		System.out.println(height);
		bfr.close();
	}
}
profile
한땀한땀오타없이

0개의 댓글