임스는 연계 기술을 사용하는 게임을 플레이 중에 있다. 연계 기술은 사전 기술과 본 기술의 두 개의 개별 기술을 순서대로 사용해야만 정상적으로 사용 가능한 기술을 말한다.
하나의 사전 기술은 하나의 본 기술과만 연계해서 사용할 수 있으며, 연계할 사전 기술 없이 본 기술을 사용했을 경우에는 게임의 스크립트가 꼬여서 이후 사용하는 기술들이 정상적으로 발동되지 않는다. 그렇지만 반드시 사전 기술을 사용한 직후에 본 기술을 사용할 필요는 없으며, 중간에 다른 기술을 사용하여도 연계는 정상적으로 이루어진다.
임스가 사용할 수 있는 기술에는
1~9, , , , 가 있다.
~는 연계 없이 사용할 수 있는 기술이고,
은 의 사전 기술, 은 의 사전 기술이다.
임스가 정해진 순서대로 개의 기술을 사용할 때, 기술이 몇 번이나 정상적으로 발동하는지를 구해보자.
단, 연계 기술은 사전 기술과 본 기술 모두 정상적으로 발동되었을 때만 하나의 기술이 발동된 것으로 친다.
첫 번째 줄에는 총 기술 사용 횟수
이 주어진다. ()
두 번째 줄에는 임스가 사용할 개의 기술이 공백 없이 주어진다.
임스가 정상적으로 기술을 사용한 총 횟수를 출력한다.
5
S12K2
4
4
1LKR
1
4
SSKK
2
def count_successful_skills(N, skills):
stack = []
count = 0
for skill in skills:
if skill in "123456789":
count += 1
elif skill == "L":
stack.append(skill)
elif skill == "R":
if stack and stack[-1] == "L":
stack.pop()
count += 1
else:
stack.append(skill)
elif skill == "S":
stack.append(skill)
elif skill == "K":
if stack and stack[-1] == "S":
stack.pop()
count += 1
else:
stack.append(skill)
return count
N = int(input())
skills = input().strip()
result = count_successful_skills(N, skills)
print(result)
4
LSRK
이 테스트 예제의 출력이 1이 아닌 0이 나온다면, 각각 연계 기술들을 따로 담는 스택 2개로 관리하는 것을 추천한다...
import sys
N = int(sys.stdin.readline().rstrip())
skills = sys.stdin.readline().rstrip()
lr_stack = []
sk_stack = []
count = 0
for skill in skills:
if skill in "123456789":
count += 1
elif skill == "L":
lr_stack.append(skill)
elif skill == "R":
if lr_stack and lr_stack[-1] == "L":
lr_stack.pop()
count += 1
else:
print(count)
sys.exit() # 본 기술 실패 시 바로 종료
elif skill == "S":
sk_stack.append(skill)
elif skill == "K":
if sk_stack and sk_stack[-1] == "S":
sk_stack.pop()
count += 1
else:
print(count)
sys.exit()
print(count)