색인
문제 : boj20365
필요한 알고리즘
- 그리디 알고리즘
- 이것은 Greed 방법을 사용하여 해결할 수 있는 문제입니다.
- 이것은 Greed 방법을 사용하여 해결할 수 있는 문제입니다.
※ 제 코드에서는 왜 메인함수에 로직을 직접 작성하지 않았는지, 왜 Scanner 대신 BufferedReader를 사용했는지,백준을 자바로 풀 때 팁과 주의사항‘ 글을 읽어주세요. 백준을 자바로 풀기 시작하는 분들이나 백준을 자바로 풀기 팁이 필요한 분들에게 추천합니다.
설명
다음 두 가지 경우 중 더 작은 수를 선택하는 것을 고려했습니다.
1. 전체를 파란색으로 칠한 후 ‘R’을 연속해서 빨간색으로 칠합니다.
2. 전체를 빨간색으로 칠한 후 연속된 ‘B’를 파란색으로 칠합니다.
따라서 입력으로 받은 문자열에서 연속된 ‘R’ 그룹과 연속된 ‘B’ 그룹의 개수를 센다.
(코드의 rCnt 및 bCnt)
그리고 답은 둘 중 더 작은 것에 대해 +1입니다(먼저 전체를 반대 색상으로 칠해야 하기 때문입니다).
암호: 깃허브
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in), 1<<16);
public static void main(String() args) throws Exception {
new Main().solution();
}
public void solution() throws Exception {
int n = Integer.parseInt(br.readLine());
String problem = br.readLine();
int bCnt = 0;
int rCnt = 0;
char bf="\0";
for (int i = 0; i < n; i++) {
char cur = problem.charAt(i);
if (cur!
=bf) {
if (cur=='R') rCnt++;
else bCnt++;
}
bf = cur;
}
System.out.println(Math.min(rCnt, bCnt) + 1);
}
}