대회 날짜 : 2024년 4월 28일
문제 수 : 2/14문제
등수 : 112/178
A. 글로벌 포닉스 ( 03:51 ) Bronze Ⅳ
시간 제한 1초 / 메모리 제한 1024 MB
모두가 알다시피, 포닉스는 인류의 삶에 기여하는 가치창출대학 포스텍을 대표하는 마스코트이다! 포닉스는 오늘도 GLOBAL하고 새로운 가치를 창출하기 위해 노력하고 있다.
컴퓨터 과학 분야에서, GLOBAL한 가치란 단언컨대 ICPC World Finals 진출이다. 포닉스는 포스텍의 ICPC World Finals 진출을 위한 응원 문구를 만들려 한다. 응원 문구는 문자열 세 개로 이루어져 있다. 포닉스의 빅데이터 연구 결과, 세 문자열이 순서와 관계없이 각각 l, k, p로 시작할 경우 포스텍은 ICPC World Finals에 진출할 수 있다. 포닉스는 이러한 응원 문구를 GLOBAL한 문구로 부르기로 했다.
포닉스가 정한 세 개의 문자열이 주어질 때, 응원 문구가 GLOBAL한지 판단하여라.
나의 코드
#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 3
using namespace std;
int main(void){
vector<string> A(MAX);
for (int i=0;i<MAX;i++){
cin >> A[i];
}
sort(A.begin(),A.end());
if (A[0][0]=='k' && A[1][0]=='l' && A[2][0]=='p'){
cout << "GLOBAL";
}
else {
cout << "PONIX";
}
return 0;
}
이 문제는 문자열의 시작 문자가 k, l, p가 모두 존재하는지를 구하는 문제다. 나는 문자열을 입력받아 정렬을 해서 비교하는 방식으로 풀었다.
B. 예비 소집 결과 보고서 ( 03:58 ) Bronze Ⅲ
시간 제한 1초 / 메모리 제한 1024 MB
PPC 본 대회 하루 전에는 참가 팀들의 환경 적응을 위한 예비 소집이 진행된다. 예비 소집에는 3문제가 사용되었으며, 𝑁팀이 참여하였다. 각 문제와 팀에는 1번부터 차례대로 번호가 붙어 있다. PPC 운영진들은 예비 소집이 얼마나 효과적이었는지 알아보기 위해 보고서를 작성해 보기로 했다.
예비 소집의 효과를 알아내기 위해서는 성실하게 참여한 팀의 수를 구해야 한다. 예비 소집에 성실하게 참여한 팀이란 다음과 같은 조건을 만족하는 팀이다.
- 세 문제 중 최소 하나를 해결하였다.
- 문제를 번호가 작은 것부터 해결하였다. 즉, 어떤 문제를 시간 에 해결했을 때 그보다 번호가 작은 문제들은 모두 해결하였으며 해결 시간이 이하이고, 그보다 번호가 큰 문제들은 해결하지 않았거나 해결 시간이 이상이어야 한다.
각 팀이 각 문제를 해결한 시간이 주어질 때, 예비 소집에 성실하게 참여한 팀의 수를 구하여라.
나의 코드
#include <iostream>
#include <vector>
#include <algorithm>
#define MAX 3
using namespace std;
int main(void){
int n,m=0;
cin >> n;
while(n--){
vector<int> A(MAX);
for (int i=0;i<MAX;i++){
cin >> A[i];
if (A[i]==-1){
A[i]=1000;
}
}
vector<int> B=A;
sort(B.begin(),B.end());
if (A.front()!=1000 && A==B){
m++;
}
}
cout << m;
return 0;
}
이 문제는 조건에 만족하는 입력값이 몇 개인지 구하는 문제다. 조건은 3개가 모두 -1이면 FALSE, -1이 아닌 값이지만 앞에 숫자가 뒤에 숫자보다 크다면 FALSE다. 나는 -1이라면 1000으로 바꾸고 입력값의 처음값이 1000이 아니면서 정렬을 한 데이터와 같다면 개수를 더하는 방식으로 구했다.
F. 불사조 ( UPSOLVING ) Silver Ⅴ
시간 제한 1초 / 메모리 제한 1024 MB
불사조는 영생을 사는 것으로 유명한 환상의 동물이다. 포닉스 역시 불사조인 만큼 영원히 살 수 있지만, 포닉스가 영생을 누리는 방법은 조금 특이하다.
포닉스는 마법을 사용해 새로운 포닉스를 만든다. 마법을 사용하는 포닉스의 마력을 𝑥라고 하자. 포닉스가 마법을 사용하면 항상 2마리의 새로운 포닉스가 만들어지며, 새로 만들어진 포닉스 각각은 𝑥/2와 𝑥/2만큼의 마력을 가지게 된다. 한 번 마법을 사용한 포닉스는 더 이상 마법을 사용할 수 없다.
초기에는 마력이 𝑋인 한 마리의 포닉스만이 존재한다. 이를 조상 포닉스라 하자. 조상 포닉스가 명령을 내리면 마법을 사용할 수 있는 모든 포닉스가 마법을 사용해 각각 2마리의 새로운 포닉스를 만든다. 조상 포닉스 역시 마법을 최대 한 번만 사용할 수 있기 때문에, 첫 번째 명령에서 스스로 마법을 사용한 후에는 더 이상 마법을 사용하지 않는다.
조상 포닉스의 마력 𝑋와 명령을 내린 횟수 𝑀이 주어질 때, 조상 포닉스를 포함한 존재하는 모든 포닉스의 마력의 합을 구하여라.
나의 코드
#include <iostream>
using namespace std;
int main(void){
long long A,B;
cin >> A >> B;
cout << A*(B+1);
return 0;
}
이 문제는 조금만 생각하면 간단하게 풀렸다. 부모 불사조와 자식 불사조로 설명을 하자면 부모 불사조의 힘을 자식 불사조가 나눠가진다. 즉 자식 불사조 모두의 합 == 부모 불사조다. 그러면 얼마든지 자식을 만들더라도 합은 조상 불사조의 배수가 된다.
J. 포닉스의 문단속 ( UPSOLVING ) Silver Ⅰ
시간 제한 1초 / 메모리 제한 1024 MB
포닉스의 집은 어디일까? 사람들은 포닉스의 집이 포스텍일 것이라 생각하지만, 사실 포닉스는 하늘 높이 있는 불사조 마을에 살고 있다. 불사조 마을은 외부인의 접근이 어려울뿐더러 불사조들은 태생이 정의로운 생물이기 때문에 불사조들은 문단속을 잘 까먹곤 한다.
포닉스 역시 예외는 아니라서 매일 문을 잠그지 않은 채로 포스텍과 불사조 마을을 왕복하고 있었다. 그러던 어느 날, 포닉스가 집을 비운 사이 포스텍의 유명한 대도 Mr. K가 포닉스의 집에 자물쇠를 설치하고 말았다! 자물쇠는 𝑁개의 다이얼이 연결된 형태이며, 각 다이얼에는 A부터 Z까지의 알파벳 대문자가 차례대로 적혀 있다.
포닉스는 자물쇠를 풀기 위해 다이얼 중 하나를 골라 1번 돌리는 작업을 할 수 있다. 이때 고른 다이얼에 표시된 문자가 A였다면 B로, B였다면 C로, ..., Z였다면 A로 변한다. 반대 방향으로는 돌릴 수 없다. 정보를 모은 결과, 포닉스는 이러한 작업을 정확히 𝐾번 해 표시할 수 있는 문자열 중 사전 순으로 가장 작은 것이 자물쇠의 비밀번호라는 사실을 알아내었다. 포닉스가 다시 집을 되찾을 수 있도록 자물쇠의 비밀번호를 알아내 보자.
나의 코드
#include <iostream>
using namespace std;
int main(void){
int n,m;
string A;
cin >> n >> m >> A;
for (int i=0;i<n;i++){
if (91-A[i]<=m && A[i]!=65){
m-=91-A[i];
A[i]=65;
}
}
while(m--){
A.back()++;
if (A.back()==91){
A.back()-=26;
}
}
cout << A;
return 0;
}
이 문제는 앞에서부터 문자를 A로 만드는게 가능한지 검사하고 문자를 바꾸는 문제다. A까지 미는 게 가능하다면 밀고 아니라면 다음자리로 보내면 쉽게 풀이가 가능했다.
'Algorithm > Beakjoon' 카테고리의 다른 글
2024 SCON (0) | 2024.05.30 |
---|---|
2024 부산대학교 프로그래밍 대회 (PNUPC) - UPSOLVING (0) | 2024.05.29 |
2024 UNIST-DGIST-POSTECH 연합 프로그래밍 경진대회 (2024 UDPC) (0) | 2024.04.01 |
GEC-Cup 2024 (0) | 2024.03.31 |
2024 상반기 전남대학교 PIMM 알고리즘 파티 (3) | 2024.03.12 |