목록Baekjoon/Gold (80)
GitHubSeob

문제 https://www.acmicpc.net/problem/20210 20210번: 파일 탐색기 첫 줄에 문자열의 개수 N(2 ≤ N ≤ 10,000)이 주어진다. 그 다음 N줄에 정렬할 문자열이 한 줄에 하나씩 주어진다. 모든 문자열의 길이는 100 이하이며, 알파벳 대소문자와 숫자로만 이루어져 있다. www.acmicpc.net 문제풀이 단순 코딩이라 지저분하게 풀었다. 조건자체는 어려운 게 크게 없어 보이지만 0과 숫자가 2^63를 초과할 수 있단 점에서 고생을 했다. 조건이 많아 return 할 것이 많다 보니까 반례의 문자열 순서에 따라 답이 다르게 나오는 경우도 있었다. 문제를 제출한 사람이 거의 없어서 반례를 찾는데도 고생했다. 숫자와 알파벳이 오면 숫자가 더 앞에 온다. 같은 알파벳인 ..

문제 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/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/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와 제곱인 수를 다른 값과 곱..

문제 https://www.acmicpc.net/problem/9663 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 문제풀이 처음에는 2차원 배열을 이용하여 풀었는데 시간 초과가 나서 다른 풀이를 참고했다. 퀸은 가로, 세로, 대각선으로 이동이 가능하다. 현재 위치에 퀸을 두면 가로줄에는 더 이상 퀸을 둘 수 없다는 점을 이용하여 1차원 배열을 y축 배열로 사용했다. (board[y]가 0이면 (y, 0)에 퀸을, 1이면 (y, 1)에 퀸을 둔다는 의미이다.) DFS를 사용했고, 현재 y위치를 인자로 넘겨주었다. 퀸의 x..