반응형
5
OOXXOXXOOO
OOXXOOXXOO
OXOXOXOXOXOXOX
OOOOOOOOOO
OOOOXOOOOXOOOOX
입력의 형태는 크게 횟수와 문자열의 모음으로 문자열 벡터를 생성해서 5번 반복해서 생성한 벡터에 차례대로 입력함
이중 for문을 사용해서 벡터 값에 있는 문자열을 하나씩 꺼내서
문자열 인덱스로 접근 후 각 값이 O인지 X인지 확인 후 점수체계를 만들어줌
str | O | O | X | X | O | X | X | O | O | O |
ans | 1 | 2 | 0 | 0 | 1 | 0 | 0 | 1 | 2 | 3 |
위의 표를 참고해서 보면 연속되어 퀴즈를 맞힌 OO, OOO의 경우 얻을수있는 점수는 1점이 3개가 아니라
연달아 맞힘으로 인해 점수가 연속해서 맞힌 갯수만큼 증가하게된다
따라서 OO = 3점, OOO = 6점임을 알수있음
나는 총점과 str[j]에 해당하는 점수를 각각의 변수로 따로 선언해서 과거 문제를 맞춘 이력을 기억하도록 했다
ex) O : score++;
X : score=0;
연속해서 맞히다가 틀릴 경우 연속했던걸 기억해둘필요 없으므로 score를 0으로 리셋해준다
#include<bits/stdc++.h>
using namespace std;
int main() {
int ans;
int score;
vector<string> v;
string str="";
int cnt;
cin >> cnt;
for(int i=0; i<cnt; i++){
cin >> str;
v.push_back(str);
}
for(int i=0; i<cnt; i++){
ans=0;
score=0;
str = v[i];
for(int j=0; j<str.length(); j++){
if(str[j] == 'O'){
score++;
ans+=score;
}
else {
score=0;
}
}
cout<<ans<<"\n";
}
return 0;
}
시간 0ms
좀더 줄여본 방법
벡터에 따로 저장 안하고 입력과 동시에 입력받은 문자열 판별해서 점수출력하기
#include<bits/stdc++.h>
using namespace std;
int main() {
int ans;
int score;
string str="";
int cnt;
cin >> cnt;
for(int i=0; i<cnt; i++){
cin >> str;
ans=0;
score=0;
for(int j=0; j<str.length(); j++){
if(str[j] == 'O'){
score++;
ans+=score;
}
else {
score=0;
}
}
cout<<ans<<"\n";
str="";
}
return 0;
}
시간 4ms
코드 길이랑 메모리는 조금 줄었고 시간은 비슷하거나 미세하게 차이가 있는듯
출처 : www.acmicpc.net/problem/8958
반응형
'문제풀기' 카테고리의 다른 글
[백준/BOJ] 구현 11720번 문제, 숫자의 합 C++ 풀이 (0) | 2021.03.24 |
---|---|
[백준/BOJ] 구현 11399번 문제, ATM C++ 풀이 (0) | 2021.03.21 |
[백준/BOJ] 구현 2562번 문제, 최댓값 C++ 풀이 (0) | 2021.03.17 |
[백준/BOJ] 구현 2577번 문제, 숫자의 개수 C++ 풀이 (0) | 2021.03.12 |
[백준/BOJ] 구현 1110번 문제, 더하기 사이클 C++ 풀이 (0) | 2021.03.11 |
[백준/BOJ] 구현 2588번 문제, 곱셈 C++ 풀이 (0) | 2021.03.10 |