대회 날짜 : 2024년 5월 11일
문제 수 : 3/10문제
등수 : 58/173
A. 과민성 대장 증후군 ( 00 : 03 ) Bronze Ⅲ
시간 제한 2초 / 메모리 제한 1024 MB
상원이는 과민성 대장 증후군을 앓고 있다. 과민성 대장 증후군의 원인은 스트레스!
상원이의 𝑁일 동안의 스트레스 변화량 𝐴1,⋯,𝐴𝑁 이 주어진다. 𝐴𝑖≥0 이면 𝑖번째 날에 𝐴𝑖 만큼 스트레스가 쌓이고, 𝐴𝑖<0 이면 𝑖번째 날에 −𝐴𝑖만큼 스트레스가 해소된다. 단, 변화를 관찰하기 시작한 시점의 스트레스 양은 0이며, 누적된 스트레스 양보다 해소하는 스트레스 양이 더 많을 경우 스트레스는 0이 될 때까지만 감소한다.
상원이는 스트레스가 𝑀 이상 쌓인 날에 복통을 겪게 될 때, 상원이가 며칠 동안 복통에 시달리게 되는지 알아보자.
CODE - C++
#include <iostream>
using namespace std;
int main(void){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N,M,K=0,S=0;
cin >> N >> M;
while(N--){
int A;
cin >> A;
K=max(0,K+A);
if (K>=M) S++;
}
cout << S;
return 0;
}
이 문제는 누적합이 M을 넘는지 검사하는 문제다.
누적합 변수로 해결이 가능하니 K에 누적합을 하고 0보다 작다면 0으로 만든다.
- 시간복잡도 : O( N )
- 공간복잡도 : O( 1 )
B. 팀명 정하기 2 ( 00 : 08 ) Bronze Ⅱ
시간 제한 1초 / 메모리 제한 1024 MB
숭실대학교 컴퓨터학부 문제해결 소모임 SCCC 부원들은 매년 SCON, ICPC와 같은 팀 대회에서 사용할 팀명을 정하기 위해 많은 고민을 한다. 특히 여러 개의 후보 중에서 실제로 사용할 팀명 하나를 정하는 것이 어렵기 때문에, 졸업을 두 학기 남겨둔 정휘는 더 이상 부원들이 고통을 받지 않도록 가이드라인을 만들었다.
정휘의 가이드라인에 따르면 아래 조건 중 만족하는 조건의 개수가 많을수록 좋은 팀명이다.
- 알파벳 대문자보다는 소문자가 귀엽다. 따라서 대문자가 소문자보다 더 많이 등장하면 안 된다.
- 팀명이 너무 복잡하면 사회자가 제대로 읽지 못할 수 있다. 따라서 팀명은 10글자 이하로 지어야 한다.
- 숫자로만 구성된 팀명은 월드 파이널에 진출하지 못하는 징크스가 있다. 따라서 팀명에는 숫자가 아닌 글자가 하나 이상 포함되어 있어야 한다.
𝑁개의 팀명 후보가 주어진다. 가이드라인에서 제시한 세 가지 조건을 모두 만족하는 팀명을 출력하는 프로그램을 작성해 보자.
CODE - C++
#include <iostream>
using namespace std;
int main(void){
short N;
cin >> N;
while(N--){
string S;
short a=0,b=0;
cin >> S;
for (short i=0;i<S.length();i++){
if (S[i]>='A' && S[i]<='Z') a++;
else if (S[i]>='a' && S[i]<='z') b++;
}
if (S.length()<=10 && a<=b && (b || S.find('-')!=string::npos)){
cout << S;
break;
}
}
return 0;
}
이 문제는 문자열을 입력받아서 조건에 맞는지 검사하는 문제이다.
문자열을 검사하면서 문자열에 소문자와 대문자의 개수를 계산해서 조건문만 만든다면 풀린다.
- 시간복잡도 : O( N * S.length() )
- 공간복잡도 : O( S.length() )
C. 온데간데없을뿐더러 ( 00 : 13 ) Bronze Ⅲ
시간 제한 1초 / 메모리 제한 1024 MB
‘온데간데없을뿐더러’는 어떻게 띄어 써야 할까? 형용사 ‘온데간데없다’와 어미 ‘-을뿐더러’가 결합하였기 때문에 띄어쓰기 없이 ‘온데간데없을뿐더러’라고 쓰는 것이 올바른 표현이다.
각각 𝑁개의 양의 정수로 구성된 두 배열 𝐴, 𝐵가 주어진다. 𝐴에 있는 수를 모두 순서대로 공백 없이 이어서 썼을 때 얻게 되는 수를 𝑋, 𝐵에 있는 수를 같은 방식으로 이어서 썼을 때 얻게 되는 수를 𝑌라고 했을 때, 𝑋와 𝑌 중 더 작은 값을 구하는 프로그램을 작성하시오.
CODE - C++
#include <iostream>
using namespace std;
void S(int N,string &S){
while(N--){
string s;
cin >> s;
S+=s;
}
}
int main(void){
string A,B;
int N;
cin >> N;
S(N,A);
S(N,B);
cout << min(stoull(A),stoull(B));
return 0;
}
이 문제는 숫자를 붙이고 2개의 숫자 중에서 더 작은 수를 출력하는 문제다.
자료형을 정수로 한다면 입력된 정수의 자릿수를 알아야 하기 때문에 문자열로 만들고 함수를 사용하는 게 더 유리하다.
- 시간복잡도 : O( MAX(A.length(), B.length()) )
- 공간복잡도 : O( MAX(A.length(), B.length()) )
'Algorithm > Beakjoon' 카테고리의 다른 글
제4회 숙명여자대학교 프로그래밍 경진대회 (SMUPC) - UPSOLVING (0) | 2024.06.04 |
---|---|
KPSC Welcome Contest 2024 - UPSOLVING (1) | 2024.06.02 |
2024 부산대학교 프로그래밍 대회 (PNUPC) - UPSOLVING (0) | 2024.05.29 |
2024 POSTECH Programming Contest (0) | 2024.05.08 |
2024 UNIST-DGIST-POSTECH 연합 프로그래밍 경진대회 (2024 UDPC) (0) | 2024.04.01 |