Problem Solving
[백준-c++] 8958번 : OX퀴즈
Dev_en
2021. 11. 19. 01:43
답안
첫 번째 시도(실패) - 아직도 반례를 모르겠다.. 어디서 틀린 건지 아시는 분 알려주시면 감사하겠습니다(__)
더보기
더보기
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
int n;
int seq=0, score=0;
cin >> n;
char ox[n][81];
for(int s=0; s<n; s++){
cin >> ox[s];
}
for(int s=0; s<n; s++){
int i=0;
score=0;
while(ox[s][i] != '\0'){
seq=0;
while(ox[s][i] == 'O'){
seq++;
score += seq;
i++;
}
i++;
}
cout << score << '\n';
}
return 0;
}
두번째 시도(성공)
#include <iostream>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
int n;
cin >> n;
char ox[81];
for(int s=0; s<n; s++){
cin >> ox;
int score = 0; //총점
int flag=0; //연속 O 여부
int seq_score=1; //연속 O일 때 추가될 점수
for(int i=0; ox[i] != '\0'; i++){
if(ox[i] == 'O'){
flag=1;
score += seq_score;
}
else{
flag=0;
seq_score=1;
}
if(flag==1){
seq_score++;
}
}
cout << score << endl;
}
return 0;
}
느낀 점
- 다중첩반복문은 flag를 잘 쓰면 한 단계 줄일 수 있다.
- 변수 초기값 설정은 생각보다 중요하다.
궁금한 점
- 배열 크기를 입력 문자열 크기에 맞게 동적으로 할당하는 방법은?