728x90
반응형
https://www.acmicpc.net/problem/25497
자료구조 알고리즘 중 stack을 이용한 문제다.
푼 사람이 적어 내가 고민한 아이디어를 공유해보려 한다.
string을 통해 기술을 입력 받는다면 사실상 N은 필요없다.
접근 아이디어는 다음과 같다.
스킬을 보면 SK와 LR은 세트다.
즉 S가 먼저 나와야 K가 가능하고 L이 먼저 나와야 R이 가능하다.
그렇다면 이 두개의 세트를 담을 stack을 준비한다.
각 stack은 SK와 LR만을 담는다. 이때 lrCombo stack은 LR만을 skCombo stack은 SK 기술만을 처리한다.
1) S와 L이면 무조건 해당 기술 stack에 넣는다.
2) K와 R은 각 기술 stack이 비어있는지 확인한다.
2-1) 각 기술 stack이 비어있다면 그냥 넘긴다.
2-2) 각 기술 stack에 선 기술이 있다면 사용으로 처리한다.
3) 그 외 모든 숫자는 항상 기술 사용으로 처리한다.
여기서 기술 사용으로 처리한다 부분이 문제에서 원하는 기술이 정상적으로 발동되는 횟수다.
#include<iostream>
#include<stack>
#define FastIO ios::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);
using namespace std;
int main(void)
{
FastIO;
int N = 0; // 총 기술 사용 횟수 N
cin >> N;
string skill;
cin >> skill;
stack<char> lrCombo;
stack<char> skCombo;
int skillUseCnt = 0;
for ( int i = 0; i < skill.size(); i++ )
{
if ( skill[i] == 'L' )
{
lrCombo.push(skill[i]);
}
else if ( skill[i] == 'S' )
{
skCombo.push(skill[i]);
}
else if ( skill[i] == 'K' )
{
if ( !skCombo.empty() )
{
skillUseCnt++;
skCombo.pop();
}
else
break;
}
else if ( skill[i] == 'R' )
{
if ( !lrCombo.empty() )
{
skillUseCnt++;
lrCombo.pop();
}
else
{
break;
}
}
else
{
skillUseCnt++;
}
}
cout << skillUseCnt << "\n";
return 0;
}
728x90
반응형
'알고리즘 (C++)' 카테고리의 다른 글
[백준]2325번: 자료구조는 정말 최고 (0) | 2023.12.22 |
---|---|
[백준]1296번: 팀 이름 정하기 (0) | 2023.12.13 |
[백준]2018: 수들의 합 5 (0) | 2023.12.05 |
[백준]11501번: 주식 (0) | 2023.11.27 |
[백준]11652번: 카드 (0) | 2023.11.24 |