기술 연계마스터 임스 - 문제 25497
성능 요약
메모리: 33464 KB, 시간: 864 ms
분류
자료 구조, 구현, 스택
제출 일자
2024년 11월 14일 09:15:42
문제 설명
임스는 연계 기술을 사용하는 게임을 플레이 중에 있다. 연계 기술은 사전 기술과 본 기술의 두 개의 개별 기술을 순서대로 사용해야만 정상적으로 사용 가능한 기술을 말한다.
하나의 사전 기술은 하나의 본 기술과만 연계해서 사용할 수 있으며, 연계할 사전 기술 없이 본 기술을 사용했을 경우에는 게임의 스크립트가 꼬여서 이후 사용하는 기술들이 정상적으로 발동되지 않는다. 그렇지만 반드시 사전 기술을 사용한 직후에 본 기술을 사용할 필요는 없으며, 중간에 다른 기술을 사용하여도 연계는 정상적으로 이루어진다.
임스가 사용할 수 있는 기술에는 1~9, L, R, S, K가 있다. 1~9는 연계 없이 사용할 수 있는 기술이고, L은 R의 사전 기술, S는 K의 사전 기술이다.
임스가 정해진 순서대로 N개의 기술을 사용할 때, 기술이 몇 번이나 정상적으로 발동하는지를 구해보자.
단, 연계 기술은 사전 기술과 본 기술 모두 정상적으로 발동되었을 때만 하나의 기술이 발동된 것으로 친다.
입력
첫 번째 줄에는 총 기술 사용 횟수 N이 주어진다. (1 ≤ N ≤ 200,000)
두 번째 줄에는 임스가 사용할 N개의 기술이 공백 없이 주어진다.
출력
임스가 정상적으로 기술을 사용한 총 횟수를 출력한다.
<내 코드>
import sys
N = int(sys.stdin.readline())
count = 0
values = list(sys.stdin.readline())
# has_L = False
# has_S = False
buffer = []
i = 0
while i < N :
value = values[i]
if value in "123456789":
count += 1
elif value in "LS":
buffer.append(value)
elif value == "R":
if "L" in buffer:
buffer.remove("L")
count += 1
else:
break
elif value == "K":
if "S" in buffer:
buffer.remove("S")
count += 1
else:
break
else :
break
i += 1
sys.stdout.write(str(count))
- 문제 조건에서 " 게임의 스크립트가 꼬여서 이후 사용하는 기술들이 정상적으로 발동되지 않는다 " 이 내용
을 간과했음 이 조건이 있으면 break 를 써야하는것을 이해하게됨
- 문자열은 특별히 리스트에 넣을필요없이 곧바로 문자열자체로 조건문 판별이 가능함
<모범사례>
import sys
def main():
import sys
N = int(sys.stdin.readline())
skills = sys.stdin.readline().strip()
count = 0
buffer = []
for i in range(N):
skill = skills[i]
if skill in "123456789":
# Regular skills that can be used independently
count += 1
elif skill in "LS":
# Prerequisite skills for combo skills
buffer.append(skill)
elif skill == "R":
# Combo skill R requires L
if "L" in buffer:
buffer.remove("L")
count += 1
else:
# Script gets messed up; stop processing further skills
break
elif skill == "K":
# Combo skill K requires S
if "S" in buffer:
buffer.remove("S")
count += 1
else:
# Script gets messed up; stop processing further skills
break
else:
# Invalid skill; stop processing
break
print(count)
if __name__ == "__main__":
main()
- 크게 내가 참고한 코드와 다른것은 없음
<보충학습>
- 문제를 잘 읽자!
'문제풀이 > 일일연습문제' 카테고리의 다른 글
[스택/큐]99클럽 코테 스터디 16일차 TIL + 백준/Silver/2161. 카드1 (0) | 2024.11.13 |
---|---|
[스택/큐]99클럽 코테 스터디 15일차 TIL + 프로그래머스/1/12906. 같은 숫자는 싫어 (0) | 2024.11.12 |
[스택/큐]99클럽 코테 스터디 14일차 TIL + 백준/Bronze/10845. 큐 (0) | 2024.11.11 |
[스택/큐]99클럽 코테 스터디 13일차 TIL + 백준/Bronze/12605. 단어순서 뒤집기 (0) | 2024.11.10 |
[스택/큐]99클럽 코테 스터디 12일차 TIL + 백준/Silver/10828. 스택 (0) | 2024.11.09 |