CPP에서는 char 포인터로 문자열을 받는 것 이외에 string 헤더를 통하여
문자열을 배열 형태로 저장할 수 있다
#include <iostream>
#include <string>
//int* arr;
//int arrLen;
//cin >> arrLen;
//arr = new int[arrLen];
using namespace std;
int main() {
int caseNum;
cin >> caseNum;
for (int i = 0; i < caseNum; i++) {
string str;
cin >> str;
for (int i=0;i<str.length();i++)
cout << "str[" << i << "] = " << str[i] << endl;
}
}
결과:
3
first
str[0] = f
str[1] = i
str[2] = r
str[3] = s
str[4] = t
second
str[0] = s
str[1] = e
str[2] = c
str[3] = o
str[4] = n
str[5] = d
third
str[0] = t
str[1] = h
str[2] = i
str[3] = r
str[4] = d
이를 기반으로 백준 배열문제 8958을 풀이해보면
#include <iostream>
#include <string>
using namespace std;
int main() {
int caseNum;
cin >> caseNum;
for (int i = 0; i < caseNum; i++) {
string str;
cin >> str;
int totalScore = 0;
int score = 0;
for (int i = 0; i < str.length(); i++) {
if (str[i] == 'O')
score++;
else if(str[i] == 'X')
score = 0;
totalScore += score;
}
cout << totalScore << endl;
}
}
string이 가지는 메서드 .length()로 길이를 구하여
각 문자에 배열형태로 접근할 수 있다.
int totalScore = 0;
int score = 0;
총점변수와, 각 인덱스별 점수에 대한 변수를 주고
if (str[i] == 'O')
score++;
else if(str[i] == 'X')
score = 0;
totalScore += score;
O일 때 점수 기준을 +1 하고, X일때 벌어놓은 점수 기준을 초기화 시켜준 다음
한 인덱스마다 총점에 점수를 더해주는 방식으로 작성한다.
파이썬의 경우 입력 문자열을 list()로 묶어주면 자동으로 문자마다 리스트의 값으로 하나하나 할당해준다
import sys
a = int(input())
for i in range(a):
case = list(input())
total_score = 0
score = 0
for j in range(0, len(case)):
if case[j] == 'O':
score += 1
elif case[j] == 'X':
score = 0
total_score += score
print(total_score)