안녕하세요. 지난 포스팅의 BOJ 1546번 : 평균에서는 파이썬의 리스트 자료형과 내장함수인 max() 함수와 sum() 함수를 이용해서 문제를 풀어보았습니다. 오늘은 리스트와 반복문을 활용해서 문자열을 분석하는 방법에 대해서 알아보도록 하겠습니다.
핵심 포인트
- 1차원 배열 : 리스트 자료형
- 문자열 내장 함수 : split() 함수와 count() 함수
제출 코드
T = int(input())
for _ in range(T) :
quiz = input()
score = 0
for s in quiz.split('X') :
for i in range(1, s.count('O') + 1) :
score += i
print(score)
해설
문제의 입력은 첫번째 줄에 테스트케이스의 개수, 두번째 줄부터는 각 테이스케이스가 들어오게 됩니다. 이제, 저희의 목표는 입력된 문자열에서 문제의 조건에 맞게 적절하게 점수를 계산한 뒤 출력해주어야 합니다. 이를 위해서 어떤 방식으로 점수가 계산되는지부터 보도록 하죠.
예를 들어, "OOXXOXXOOO"와 같은 문자열이 입력되었다고 가정하겠습니다. 이 문자열에서 O는 문제가 맞은 것이고 X는 문제가 틀린 것입니다. 이때, 문제를 맞았다면 해당 문제의 점수는 그 문제까지 연속된 O의 개수가 됩니다. 예를 들어 이 문제의 경우에는 1 + 2 + 0 + 0 + 1 + 0 + 0 + 1 + 2 + 3 = 10점이 됩니다.
이 예제를 통해서 저희는 문자 X를 기준으로 잘라서 문자열 리스트를 만들어 주는 것을 생각하면 됩니다. 즉, 위 예제에서는 ["OO", "O", "OOO"]가 되는 것이죠. 저희는 이 과정을 문자열 내장함수인 split() 함수를 이용해서 할 수 있습니다. 그러면 ["OO", "", "O", "", "OOO"]를 얻을 수 있습니다. 중간에 끼여있는 ""의 경우에는 다음 코드에서 생략될 수 있습니다.
다음으로 해야하는 것은 문자열 리스트의 각 원소인 "OO", "O", "OOO"에서 O의 개수를 확인한 뒤 O의 개수만큼 점수를 연속합으로 구해주어야합니다. 이를 위해서 저는 위의 코드에서처럼 X를 기준으로 자른 문자열 리스트에서 원소를 하나씩 가져온 뒤 해당 원소( "OO", "O", "OOO")에서 O의 개수가 몇 개나 있는 지 확인해주었습니다. 이때 사용한 문자열 내장함수는 count() 함수입니다. 이 함수는 문자열 내의 문자의 개수를 반환해줍니다. 예를 들어, 위의 예제에서는 각각 2, 1, 3을 얻게 되죠. 다음 반복문에서는 반복되는 O의 개수만큼 i를 1씩 증가시켜 score 변수에 더해주었습니다. 이 과정을 모든 문자열 리스트에 반복하여 각 테스트케이스마다 반복 출력해주는 것이죠.
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 1065번 : 한수 (0) | 2022.06.25 |
---|---|
BOJ 4673번 : 셀프 넘버 (0) | 2022.06.22 |
BOJ 1546번 : 평균 (0) | 2022.06.12 |
BOJ 3052번 : 나머지 (0) | 2022.06.11 |
BOJ 2577번 : 숫자의 개수 (0) | 2022.06.11 |