본문 바로가기

전체 글

(58)
백준 16719 ZOAC http://www.acmicpc.net/problem/16719 16719번: ZOAC 2018년 12월, 처음 시작하게 된 ZOAC의 오프닝을 맡은 성우는 누구보다 화려하게 ZOAC를 알리려 한다. 앞 글자부터 하나씩 보여주는 방식은 너무 식상하다고 생각한 성우는 문자열을 보여주는 새로 www.acmicpc.net 우선순위 큐를 사용해 푸는 문제였습니다. 현재까지의 ZOAC 문자열을 bool 배열을 통해 표현한 후 추가할 문자열에 대해 사전순으로 앞서는지 확인하기 위해 우선순위큐에 현재 문자를 추가했을때 문자열과 추가한 문자의 index를 pair로 추가했습니다. 문자열에 대해 삽입연산은 시간이 오래걸리므로 bool 배열을 통해 추가해줬습니다. #include #include #include #inc..
백준 2026 소풍 #include #include #include #include #include #include #include using namespace std; void fast_io() { cin.tie(0)->sync_with_stdio(0); } int K,N,F; bool chk[901][901]; bool solve=false; int arr[63]; void dfs(int now){ if(solve) return; if(now==K){ solve=true; for(int x=0;x>dst; chk[src][dst]=true; chk[dst][src]=true; } dfs(0); if(!solve) cout
백준 20946 합성인수분해 #include #include #include #include #include #include #include using namespace std; void fast_io() { cin.tie(0)->sync_with_stdio(0); } bool chk[1000001]; vector solve; int main(){ fast_io(); long long N; cin>>N; chk[1]=true; priority_queue pq; for(long long x=2;x*x
백준 1016 제곱 ㄴㄴ 수 http://www.acmicpc.net/problem/1016 1016번: 제곱 ㄴㄴ 수 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수 www.acmicpc.net 에라토스테네스의 체를 사용하지않을경우 제곱수들의 최소공배수들로 세기 매우 복잡해지므로 에라토스테네스의 체를 이용하는 문제였습니다. a>a>>b; int ans=0; for(long long x=2;x*x
백준 20917 사회적 거리 두기 http://www.acmicpc.net/problem/20917 20917번: 사회적 거리 두기 Albert는 L대학에서 주최하는 Hackathon 행사 진행을 도와주기로 했는데, 사회적 거리 두기 방침에 따라 모든 참가자들을 최대한 멀리 떨어트려 좌석 배정을 해주려 한다. 이를 위해 아주 길다란 복 www.acmicpc.net 이분탐색을 통해 푸는 문제였습니다. N개중에 S개를 고르고 S개 사이의 거리중 가장 짧은 거리가 최대가 되는 값을 구하는 문제였습니다. 이분탐색에서 mid를 답이 될 수 있는지 체크하는 함수를 만드는게 문제에서 큰 부분이었고 이는 N개를 정렬한후 시작이나 끝으로 부터 시작해 mid값을 더하거나 빼나가며 그 더하거나 뺀값보다 좌석이 같거나 멀리있을때 그 좌석은 포함될 수 있습니다..
백준 15811 복면산?! http://www.acmicpc.net/problem/15811 15811번: 복면산?! 복면산이란 수학 퍼즐의 일종으로, 어떤 계산식의 각 숫자들을 특정 문자로 바꾸면 각 문자가 어떤 숫자인지 맞추는 퍼즐이다. 대표적으로 SEND+MORE=MONEY가 있다. SEND + MORE ------ MONEY S=9, E=5, N=6, D=7, www.acmicpc.net 브루트포스를 통해 푸는 문제였습니다. 알파벳과 숫자는 1대1 매칭이므로 알파벳-숫자쌍은 최대 10개임을 알 수 있습니다. 따라서 등장알파벳 또한 최대 10개이어야합니다. 10개를 넘을경우 숫자와 매칭할수 없으므로 복면산이 성립될수없습니다. O(등장알파벳=최대10!)이르므로 브루트포스를 통해 구할수있습니다. 복면상 성립여부는 최대 18자리이..
백준 9694 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 http://www.acmicpc.net/problem/9694 9694번: 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 맨위 첫 번째 줄에 T(1 sync_with_stdio(0); } int N,M; int main() { fast_io(); int T; cin>>T; for(int test=1;test>N>>M; vector route(M+1,vector()); vector E(M+1,vector()); vector dist(M+1,1e9); priority_queue pq; for(int x=0;x>src>>dst>>cost; E[src].push_back({dst,cost}); E[dst].push_back({src,cost}); } pq.push({0,0}); route[0].push_bac..
백준 17492 바둑알 점프 http://www.acmicpc.net/problem/17492 17492번: 바둑알 점프 입력의 첫 줄에 양의 정수 N이 주어진다. 이는 N × N 정사각 행렬의 한 변의 길이이다. 그 다음 줄부터 N개의 줄에 걸쳐 판의 상태가 주어진다. 각 줄은 N개의 정수가 공백으로 구분되어 주어지는 www.acmicpc.net dfs를 이용해 푸는문제였습니다. 최대 바둑알이 7개 이므로 최대 O(8^6*N*N)시간복잡도로 가정하여도 제한시간 1초를 넘지않아 dfs를 통해 모든 경우의 수를 체크해도 풀 수 있습니다. #include #include #include using namespace std; void fast_io() { cin.tie(0)->sync_with_stdio(0); } int N; int b..