본문 바로가기
Algorithm/BOJ

[백준] 20365번 블로그2 자바

by YOONAYEON 2022. 4. 20.
문제

 

 

20365번: 블로그2

neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한

www.acmicpc.net

 

 

문제 풀이

 

어차피 연속된 색깔은 한 번에 가져와서 처리할 수 있으므로 연속된 색깔을 묶어줘야 한다.

'BBRBRBBR' → 'BRBRBR' 로 생각해서 처리해도 된다는 말이다.

 

처음에 char배열을 이용해서 첫 값을 넣고 그 뒤 값부터 반복을 돌면서 문자가 다를경우에만 체크해서 배열에 넣어줬다. 근데 생각해보니 어차피 연속되지 않으니까 무조건 brbr... 또는 rbrb...이런식으로 갈텐데 굳이 문자를 다시 압축해서 가지고 있을 필요가 없었음..

 

따라서 압축된 문자열의 개수만 세고, 그 개수가 짝수인지 홀수인지에 따라서 색칠하는 수가 달라지므로 그것만 체크해주면 된다.

그리고 압축 문자열이 1일 때와 2일 때는 따로 처리해주었다.

 

 

소스 코드

 

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		String list = sc.next();
        	int answer;

		int num = 1;
		for(int i = 1; i < N; i++)
			if(list.charAt(i-1) != list.charAt(i))
				num++;

		if(num == 1)
			answer = 1;
		else if(num == 2)
			answer = 2;
		else if(num % 2 == 0)	//짝수면 첫글자와 막글자가 다름
			answer = num/2+1;
		else			//홀수면 같음
			answer = (num-1)/2 + 1;
		
        	System.out.println(answer);
		sc.close();
	}

}