728x90
https://www.acmicpc.net/problem/20365
20365번: 블로그2
neighbor 블로그를 운영하는 일우는 매일 아침 풀고 싶은 문제를 미리 정해놓고 글을 올린다. 그리고 매일 밤 각각의 문제에 대하여, 해결한 경우 파란색, 해결하지 못한 경우 빨간색으로 칠한
www.acmicpc.net
1차 시도
예제에 있는 문장을 보고 어그로(?)에 끌려 이상하게 접근을 했다.
하지만, 1~7번 문제를 파란색, 3번을 빨간색, 5번을 빨간색, 8번을 빨간색으로 순서대로 칠한다면 작업 횟수는 4번으로 가장 적다.
위 문장에서 먼저 파란색으로 칠한 다는 것 때문에, 무조건 밑 바탕을 칠하고 가야한다고 생각했다.
따라서, 다음과 같은 알고리즘을 설계함.
1. 가장 많은 색을 바탕으로 깔고 들어간다.
2. 반대되는 색을 칠하며, cnt를 +1 한다.
그러나 위 방법에 반례가 존재한다.
4
RBBR
// 정답: 2
6
RBBBBR
// 정답: 2
위 처럼 가운데 색으로 먼저 칠하고, 나머지를 칠할 때 cnt를 +1 하면
3이 나오기 때문에 틀린다.
정답
따라서, 바탕을 칠할때 가장 많이 칠해진 색 대신, 처음으로 오는 색으로 칠해야 한다.
코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
using namespace std;
int n;
string str;
vector<int> v;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int res = 1;
cin >> n;
cin >> str;
char firstChar = str[0];
bool flag = false;
for (int i = 0; i < str.length(); i++) {
if (str[i] != firstChar) {
flag = true;
}
else {
if (flag) {
flag = false;
res++;
}
}
}
if (flag) res++;
cout << res;
}
728x90
'📊알고리즘 > BOJ' 카테고리의 다른 글
[그리디 #14] BOJ 16953 - A -> B (0) | 2024.02.14 |
---|---|
[그리디 #13] BOJ 13164 - 행복 유치원 (1) | 2024.02.14 |
[그리디 #11] BOJ 20300 - 서강근육맨 (0) | 2024.02.12 |
[그리디 #10] BOJ 20115 - 에너지 드링크 (0) | 2024.02.12 |
[그리디 #9] BOJ 11508 - 2+1 세일 (0) | 2024.02.11 |