출처
https://www.acmicpc.net/problem/8958
8958번: OX퀴즈
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수
www.acmicpc.net
"OOXXOXXOOO"와 같은 OX퀴즈의 결과가 있다. O는 문제를 맞은 것이고, X는 문제를 틀린 것이다. 문제를 맞은 경우 그 문제의 점수는 그 문제까지 연속된 O의 개수가 된다. 예를 들어, 10번 문제의 점수는 3이 된다.
"OOXXOXXOOO"의 점수는 1+2+0+0+1+0+0+1+2+3 = 10점이다.
OX퀴즈의 결과가 주어졌을 때, 점수를 구하는 프로그램을 작성하시오.
전체 코드
time = int(input())
num = []
for i in range(time):
num.append(list(input()))
end = []
for i in num:
prev = "N"
prev_val = 0
result=[]
for j in i:
if prev == 'O' and j == 'O':
result.append(1+prev_val)
prev_val = prev_val + 1
prev = 'O'
elif prev != 'O' and j == 'O':
result.append(1)
prev='O'
prev_val = prev_val + 1
else:
result.append(0)
prev = 'X'
prev_val = 0
end.append(sum(result))
for i in end:
print(i)
알고리즘 설명
OOXXOO라는 문자열을 OX퀴즈의 결과로 받았다고 가정하자.
첫번째 문자인 O가 가지는 점수는 1점
두번째 문자인 O가 가지는 점수는 이전의 문자가 O이기 때문에 1+1점
세번째 문자인 X가 가지는 점수는 이전 값에 관계없이 0점
네번째 문자인 X가 가지는 점수는 이전 값에 관계없이 0점
다섯번째 문자인 O가 가지는 점수는 이전의 문자가 X이기 때문에 1점
여섯번째 문자인 O가 가지는 점수는 이전의 문자가 O이기 때문에 1+1점
따라서 OOXXOO라는 OX퀴즈의 결과는 1 + 2 + 0 + 0 + 1 + 2점으로 총 6점이다.
여기서 계산에 이용한 정보는
1. 이전의 문자가 무엇이었는지
2. 이전의 문자가 가지는 값이 무엇인지
이를 이용해서 코드를 작성했다.
코드 설명
time = int(input()) #입력받을 OX퀴즈 결과의 개수
num = [] #OX퀴즈 결과를 저장하는 list
for i in range(time):
num.append(list(input()))
end = [] #OX퀴즈 결과 점수를 저장하는 list
for i in num:
prev = "N" #OX퀴즈 결과의 첫 시작지점에서는 이전 문자가 없기 때문에 N으로 초기값 설정
prev_val = 0 #위와 동일한 이유로 0으로 이전 문자의 value의 초기값 설정
result=[] #OX퀴즈 결과의 O,X의 점수를 저장하는 list
for j in i:
if prev == 'O' and j == 'O':
result.append(1+prev_val) #이전 문자가 O이고 현재 문자가 O일 경우 result에 이전 점수에 1을 더한 값을 저장
prev_val = prev_val + 1 #이전값을 현재 값으로 갱신
prev = 'O' #이전값을 현재 값으로 갱신
elif prev != 'O' and j == 'O':
result.append(1) #이전 문자가 O가 아니고 현재 문자가 O일 경우 1점을 추가
prev='O' #이전값을 현재 값으로 갱신
prev_val = prev_val + 1 #이전 값을 현재값으로 갱신
else:
result.append(0) # 위 두 경우가 아니라면 현재 문자가 X인 경우이기 때문에 0점을 저장.
prev = 'X' #이전값을 현재 값으로 갱신
prev_val = 0 #이전값을 현재 값으로 갱신
end.append(sum(result)) #list에 저장된 값들을 더해서 결과 list에 저장.
for i in end:
print(i) #결과 출력
피드백은 언제나 환영입니다! 감사합니다!
'알고리즘(Python)' 카테고리의 다른 글
[프로그래머스 LV.2] 피보나치 수 (2) | 2023.11.22 |
---|---|
[프로그래머스 LV.2] 다음 큰 숫자 (2) | 2023.11.22 |
[프로그래머스 LV.2] 더 맵게 (0) | 2023.09.20 |
알골 3번(Python) - 최소공배수, 최대공약수 구하기 (백준 2609번) (0) | 2021.09.04 |
알골 1번(Python) - 선택 정렬 & 이진 검색 (0) | 2021.08.23 |