⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.
블로그에 글을 안올렸지만, 그래도 문제는 풀었습니다. 하지만 그렇게 많이 풀지는 못했다. 왜냐하면, 담당하고 있는 프로젝트를 혼자 떠안고 있기 때문에, 담당자와 전화도 내가 기획도 내가 백도 내가 프론트도 내가 UI/UX만 따로 부탁을 드렸다. 그 프로젝트가 오늘로서 기능 구현과 동시에 UI/UX도 마무리 되었다. 내일 담당자와 전화해서 수정할 부분 체크해야지
그래서 짬이 나서 문제를 하나 건드려봤다. 실버1 문제라서 방심하다가, 아이디어가 떠오르지 않아서 한시간은 이리 저리 돌려가면서 문제를 해결하려고 노력했던것 같다.
생각해보니까 a의 개수만큼 한칸씩 둘러보면서 그 안에 들어있는 b의 개수를 세어주면 된다고 번뜩 생각이 났다. 계속 a세어보고 b세어보고 혼자서 반례 생각하다가.. 좀 늦어졌다. 정답 비율도 꽤나 높아서 쉬울줄 알았는데, 역시 이런거에 낚이면 안된다..
어쨌든, 이 문제에서 주어지는 것은 크게는 2가지로 볼 수 있다. 일단 최대 1000이다. 1000이라면 모든 자리를 돌면서 1000번의 for loop를 돌리는데, 과장해서 1000의 길이라면? 1000 * 1000 으로 1,000,000 10만번의 회수인데 컴퓨터에겐 껌이다. 그리고 이 문자열은 이어져 있다. 그래서 문자열의 범위가 벗어나도 다시 0번 인덱스로 돌아와 검사를 해줘야한다.
무식하게 풀수 있을거 같고, 문자열이 연결되어있다는 조건과 그리고 무조건 a를 연속으로 만들 수 있겠지? 그런말은 안나와 있긴한데 어쨌든 그리해서 문제를 해결했다.
#include<iostream>
using namespace std;
string str;
int main(){
cin >> str;
int a_cnt = 0;
int answer = 987654321;
for(int i = 0; i < str.length(); i++){
if(str[i] == 'a') a_cnt++;
}
for(int i = 0; i < str.length(); i++){
int b_cnt = 0;
for(int j = 0; j < a_cnt; j++){
if(str[(i + j) % str.length()] == 'b'){
b_cnt++;
}
}
answer = min(answer, b_cnt);
}
cout << answer;
}
'PS > BaekJoon' 카테고리의 다른 글
[C++/28432] 끝말잇기 (0) | 2024.05.22 |
---|---|
[C++/1527] 금민수의 개수 (0) | 2024.05.21 |
[백준/C++] 16943 숫자재배치 (0) | 2024.05.08 |
[백준/c++] 25592 바둑돌 게임 (0) | 2024.04.26 |
[백준/C++] 16974 레벨 햄버거 (0) | 2024.04.25 |