문제
문제 풀이
어차피 연속된 색깔은 한 번에 가져와서 처리할 수 있으므로 연속된 색깔을 묶어줘야 한다.
'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();
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[백준] 1292번 쉽게 푸는 문제 자바 (0) | 2022.04.25 |
---|---|
[백준] 2461번 대표 선수 자바 (0) | 2022.04.25 |
[백준] 17472번 다리 만들기2 자바 (0) | 2022.04.20 |
[백준] 9935번 문자열 폭발 자바 (0) | 2022.04.20 |
[백준] 23742번 Player-based Team Distribution 자바 (0) | 2022.04.18 |