티스토리 뷰

#include <stdio.h>

int main(void)
{
	int n;
	scanf("%d", &n);
	
	int one = 0, two = 0, max = 0, tmp;
	while(n--) {
		scanf("%d", &tmp);
		if(tmp == 1) {
			one++;
			two--;
			if(one < 1) one = 1;
			if(one > max) max = one;
		} else {
			two++;
			one--;
			if(two < 1) two = 1;
			if(two > max) max = two;
		}
	} printf("%d", max);
}

풀이 : dynamic programming

 

왼쪽은 1, 오른쪽은 2로 볼 때

 

one은 (왼쪽을 바라보는 금색 돌상의 개수) - (오른쪽을 바라보는 금색 돌상의 개수)이며

two은 (오른쪽을 바라보는 금색 돌상의 개수) - (왼쪽을 바라보는 금색 돌상의 개수)입니다.

 

1이면 one++, two--

2이면 one--, two++

을 합니다.

 

만약 1이 입력되었을 때 이전까지의 one의 값이 1 미만이면 1을 대입합니다.

만약 2가 입력되었을 때 이전까지의 two의 값이 1 미만이면 1을 대입합니다.

 

또한  one  또는 two의 값이 max보다 크다면 max에 대입해 줍니다.

 

마지막으로 max을 출력합니다.

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함