목록분류 전체보기 (370)
GitHubSeob

문제 https://www.acmicpc.net/problem/20437 20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다. www.acmicpc.net 문제풀이 문자열과 정수를 입력받았을 때, 첫 글자와 끝글자가 같은 문자열 중 가장 짧은 길이, 가장 긴 길이를 구하는 문제이다. 단순히 알파벳의 개수, 위치를 저장하는 벡터를 만들고, 벡터를 탐색하면서 값들을 구하면 된다. for (idx = 0; idx < W.size(); ++idx) { cnt[W[idx] - 'a']++; alp[W[idx] - 'a'].push_back(idx);..

문제 https://www.acmicpc.net/problem/17609 17609번: 회문 각 문자열이 회문인지, 유사 회문인지, 둘 모두 해당되지 않는지를 판단하여 회문이면 0, 유사 회문이면 1, 둘 모두 아니면 2를 순서대로 한 줄에 하나씩 출력한다. www.acmicpc.net 문제풀이 왼쪽, 오른쪽, 문자를 삭제한 개수의 정보를 갖는 DFS함수를 만들어서 풀었다. 문자열을 입력받고 왼쪽은 0, 오른쪽은 문자열 길이-1, 삭제한 문자열 개수는 0으로 둔다. 왼쪽이 오른쪽을 넘어서면 탐색을 다 했으므로 answer값을 최솟값으로 갱신한다. 왼쪽 문자와 오른쪽 문자가 같으면 각각 한 칸씩 옮기고 DFS함수를 실행한다. 왼쪽문자와 오른쪽문자가 다를 경우 조건을 확인하고 만족하면 조건문을 실행한다. 왼..

문제 https://www.acmicpc.net/problem/1202 1202번: 보석 도둑 첫째 줄에 N과 K가 주어진다. (1 ≤ N, K ≤ 300,000) 다음 N개 줄에는 각 보석의 정보 Mi와 Vi가 주어진다. (0 ≤ Mi, Vi ≤ 1,000,000) 다음 K개 줄에는 가방에 담을 수 있는 최대 무게 Ci가 주어진다. (1 ≤ Ci www.acmicpc.net 문제풀이 처음에는 보석의 가격이 큰 순, 가격이 같다면 무게는 작은 순, 가방의 무게는 큰 순으로 정렬해서 풀어보려 했지만 시간초과, 틀렸습니다를 겪고 방법을 바꿔보았다. 가방과 보석을 모두 오름차순으로 정렬하고, 가방에 담을 수 있으면 우선순위 큐에 다 집어넣는다. 보석이 더 무거워서 담을 수 없으면, 우선순위 큐에서 우선순위가 ..

문제 https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제풀이 queue와 DFS를 이용해서 풀었다. 테스트 케이스만큼 돌려야 하므로 T를 입력받고 T만큼 해당 작업을 반복한다. 1부터 N까지 숫자를 돌면서 탐색(DFS)을 한다. 다음 번호가 방문을 하지 않았다면, 방문 표시를 하고 큐에 다음 번호를 저장하고 탐색을 한다. 다음 번호가 방문한 번호라면, 순환하는 번호의 시작을 찾아야 하므로 q.front가 다음 번호일 때까지 pop을 한다. 다음 번..

문제 https://www.acmicpc.net/problem/1422 1422번: 숫자의 신 첫째 줄에 K와 N이 공백을 사이에 두고 주어진다. K와 N은 각각 50보다 작거나 같은 자연수이고, N은 K보다 크거나 같다. 둘째 줄에는 K개의 수가 한 줄에 하나씩 주어진다. 각 수는 1,000,000,000보다 www.acmicpc.net 문제풀이 전에 백준에서 풀었던 16496번 문제와 거의 같은 문제이다. 16496번 문제와 다른 점은 입력에 0이 없다는 점과 입력받은 수보다 뽑아야 하는 수가 더 많을 수도 있다는 점이다. 1~9까지는 큰 수가 무조건 좋고, 9와 10 같은 경우도 자릿수가 늘어나므로 어느 수가 들어오든 큰 수를 여러 번 뽑는 것이 좋다. 먼저 숫자를 입력받는다, 만약 숫자가 더 필요..

문제 https://www.acmicpc.net/problem/1826 1826번: 연료 채우기 첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경 www.acmicpc.net 문제풀이 트럭이 주유소에 도착할 때마다 멈춰야 하는지를 판별하는 것이 아닌, 되돌리기를 한다고 생각하면 된다. 현재 위치에서 갈 수 있는 최대 위치를 구하고, 그 사이의 주유소 중에서 가장 많은 연료를 얻을 수 있는 주유소에 간다. 우선순위 큐를 이용해 갈 수 있는 주유소를 연료의 양 기준으로 내림차순으로 하여 가장 많은 연료를 채운다. 먼저 입력받은 주..

문제 https://www.acmicpc.net/problem/2529 2529번: 부등호 두 종류의 부등호 기호 ‘’가 k개 나열된 순서열 A가 있다. 우리는 이 부등호 기호 앞뒤에 서로 다른 한 자릿수 숫자를 넣어서 모든 부등호 관계를 만족시키려고 한다. 예를 들어, 제시 www.acmicpc.net 문제풀이 처음에는 작은 수부터 모든 경우의 수를 돌면서 판별을 했더니 답은 맞았지만, 100456KB / 136ms라는 결과가 나왔다.. 그래서 다른 답들을 봤더니 큰 수가 나오자마자 중단하고, 작은 수부터 큰 수로 탐색하면서 중간 과정을 자르고 탐색을 하길래 참고하였다. 0부터 9까지의 수를 이용하여 해당 부등호에 맞게 배치하면 된다. 큰 숫자 먼저 찾을 것이기 때문에 9부터 0까지 순서대로 들어간 n..

문제 https://www.acmicpc.net/problem/15711 15711번: 환상의 짝꿍 환상의 나라 디디랜드에서는 인연의 증표로 끈을 하나씩 가지고 있다. 그들은 지극히 평범한 방법으로 이 끈을 이용하여 어떤 두 사람이 환상의 짝꿍인지 판단하는데, 두 사람의 끈을 서로 이 www.acmicpc.net 문제풀이 A+B의 최댓값은 4*10^12 이므로 구할 소수의 최댓값을 2*10^6으로 두고 했다. A+B=2, 3일 때는 소수의 합으로 나타낼 수 없으므로 NO를 출력한다. 적당한 범위 내에선 골드바흐의 추측이 맞으므로 A+B의 값이 짝수일 경우는 YES를 출력하면 된다. 값이 홀수가 나오려면 홀수+짝수의 경우의 수밖에 없다. 그리고 소수 중에 짝수인 수는 2밖에 없으므로 A+B-2의 값이 소수..

문제 https://www.acmicpc.net/problem/1016 1016번: 제곱 ㄴㄴ 수 어떤 정수 X가 1보다 큰 제곱수로 나누어 떨어지지 않을 때, 그 수를 제곱ㄴㄴ수라고 한다. 제곱수는 정수의 제곱이다. min과 max가 주어지면, min보다 크거나 같고, max보다 작거나 같은 제곱ㄴㄴ수 www.acmicpc.net 문제풀이 정수 min은 굉장히 크다. 모든 정수에 대한 배열을 선언하긴 어려우므로 min과 max 차의 최댓값은 1,000,000인 점을 이용하여 min-min ~ max-min으로 배열을 만들면 된다. 1부터 10까지의 수중에서는 제곱 ㄴㄴ수가 1, 2, 3, 5, 6, 7, 10 이렇게 7가지이다. 1부터 10까지의 수중에서 제곱인 수 4, 9와 제곱인 수를 다른 값과 곱..