하루에 한 문제씩 풀고 싶지만... 지금은 알바를 하고 있어서 시간 나는대로 풀어볼 예정이다.
블로그도 처음 써보고 해서 서툴수 있지만 최대한 노력하겠다.
이 카테고리에는 삼성 SWExpertAcademy 에 있는 D3~D4 의 난이도 또는 Contest Problem을 풀어보겠다.
오늘은 첫날이니까 쉬운거로... ㅎㅎ;
대충 설명은 이렇다. 0이나오면 있던 바로 전의 숫자를 지우고, 그렇지 않으면 계속 진행하는 것이다.
stack을 이용하면 간단하게 풀 수 있을 것 같아서 stack을 이용했다.
1.0이면 pop, 그렇지 않으면 push
2.empty를 이용해 pop을 하면서 top 항목을 모두 더하기
3.출력
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <iostream>
#include <stack>
using namespace std;
int main()
{
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int TC,K,num,ans;
cin>>TC;
for (int t=1;t<=TC;t++)
{
ans=0;
stack<int>ARR;
cin>>K;
for(int i=0;i<K;i++){
cin>>num;
if(num!=0)
ARR.push(num);
else
ARR.pop();
}
while(!ARR.empty())
{
ans+=ARR.top();
ARR.pop();
}
cout<<"#"<<t<<' '<<ans<<'\n';
}
return 0;
}
|
cs |
매우 쉬운 문제였지만 솔직히 말하면 while을 쓰지 않고도 풀 수 있었다.
이 글을 보는 분들은 while을 쓰지 않고 그냥 for문 안에서 해결하는 것을 추천한다.
아, 아마 이 글에서만 설명할 것 같긴 한데
1
2
3
4
5
|
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
|
cs |
알고리즘 문제를 풀 때 이 구문을 꼭 작성하는 것을 추천드린다. 이 문제는 case가 적어서 크게 영향은 미치지 않았겠지만 test case가 만개 정도 되는 문제에서는 이것을 작성하지 않고 input만 받는대도 시간 초과가 일어날 수 있다.
8934. 팰린드롬 공포증 D4 (0) | 2020.01.08 |
---|---|
8840. 아바바바 D3 (0) | 2020.01.07 |
9088. 다이아몬드 D4 (0) | 2020.01.05 |
8993. 하지 추측 D4 (0) | 2020.01.04 |
9229. 한빈이와 Spot Mart D3 (0) | 2020.01.03 |
댓글 영역