본문 바로가기

PS

(193)
[C++/3671] 산업 스파이의 편지 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.DFS와 구현으로 문제를 해결했습니다. 주어진 최대 7자리의 숫자를 전부 1의 자리로 나눠서 모두 숫자로 만들어서 vector에 삽입해둔 다음에, 주어진 값을 모든 경우의 수를 생성해 소수인지 판단하는 문제입니다. 구현할 때 여러 TestCase가 존재하기 때문에 초기화를 잘 쳐야하고, 중복된 값이 계속해서 답이 될 수 있기 때문에 map을 사용해서 이미 정답으로 체점했던 소수들은 제외하고 정답을 체크했습니다. 아래는 정답코드입니다.문제를 좀 더럽게 풀었습니다.#include#include#include#include#include#define MAX 10000000using namespace s..
[C++/1019] 책 페이지 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.플레문제는 거들떠도 안봅니다. 그 이유는 어렵기 때문입니다. 하지만 어느순간 그런 생각이 들었습니다. 언제까지 골드만 풀래 한단계 전진해봐야지. 그렇습니다. 플레문제를 해결했습니다. 무려 4시간만에..문제를 해결하면서 이렇게 저렇게 어떠한 규칙이 있지 않을까 어떻게 해결할까 고민을 많이 했습니다. 아주 오랜만에, 대부분의 골드나 실버 문제는 특별한 알고리즘이 아닌 구현에 치중해서 문제를 해결했었는데, 이 문제는 수학적이라고 해야할지 문제를 천천히 쪼개면서 해결했습니다.9000번까지 가려면 1~9까지를 몇번을 반복해야할까요? 처음부터 9000이라는 큰 숫자를 맞이하기 때문에 굉장히 부담스럽습니다. ..
[C++/1749] 점수 따먹기 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.누적합과 그에 대응하는 행렬크기를 완전탐색으로 문제를 해결했습니다. 누적합은 가장 유명한 DP임. 예전에 사과..어쩌구 문제에서 풀었던 문제와 매우 유사하고, 그 크기만 정의해주면 쉽게 풀리는 문제입니다. 아래는 정답 코드입니다. #include#define MAX 301using namespace std;int n,m, answer = -987654321, board[MAX][MAX], sum[MAX][MAX];void init() { cin >> n >> m; for(int i = 1; i > board[i][j]; } } for(int i = 1; i
[C++/13333] Q-인덱스 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.lower_bound를 사용해서 문제를 해결하는데, 범위가 0부터 1000까지 이기 때문에 충분히 해결할 수 있습니다. lower_bound는 시간복잡도 logN이기 때문에 확실히 처리할 수 있습니다. 한 학생이 발표한 총 n ≥ 1 편의 논문 중에서, k번 이상 인용된 논문이 k편 이상이고 나머지 n − k 편의 논문들 인용회수가 각각 k 번 이하라면, 해당 학생의 q-인덱스는 k이다.문제는 이러합니다. k번 이상 인용된 논문이 k편 이상, 나머지 n - k 편의 논문들의 인용회수가 k번 이하라면? q인덱스는 k 이다. 즉 k번이 처음 시작되는 위치를 찾아내면 되는 문제입니다. 아래는 정답 코드..
[C++/24391] 귀찮은 해강이 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.BFS를 이용해서 각 각의실마다 그룹을 나눠서 등록해두면 됩니다. 그 이후, 강의실을 돌아다니면서 몇번 바깥을 나가게 되는지를 알아볼 수 있습니다.아래는 정답 코드입니다.#include#include#include#include#define MAX 100005using namespace std;vector code,adj[MAX];int answer = 0,n,m,lecture[MAX],visited[MAX];void init(){ cin >> n >> m; int from,to; for(int i = 0; i > from >> to; adj[from].push_back(to); adj[..
[C++/17089] 세친구 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.일단 이 문제는 이해부터 해야된다. A친구가 있고 B 친구가 있는데 A와 B는 친구 사이다. 이러면 이차원 배열 또는 벡터를 이용해서 친구 사이를 만들어 줄 수 있고, 그런데 여기서 총 친구들 중에서 세 사람을 골라서 서로를 제외하고 친구 수가 가장 적은 친구 그룹을 구해야한다.그렇다면, 이차원 배열을 이용해서 친구 사이를 유지하면 됩니다. 그리고 친구의 친구가 아니고 셋이 전부 친구여야 한다는 조건을 갖고 있다. 그리고 이러한 조건을 이용해서 전체 인원중 세명을 전부 찾아보면 된다.사람의 수는 4000명이고, 4000 * 4000 * 4000은? 64,000,000,000이 나와서 시간상 처리를..
[C++/23843] 콘센트 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.콘센트가 여러개 존재하고, 그 콘센트를 빠르게 채워넣어야지 빠른 시간안에 충전을 할 수 있을 것이다.비동기처럼 생각해서 문제를 해결했다. 일단 콘센트가 주어지면, 무조건 제일 오래 충전해야하는 애들을 집어넣고 그 뒤에  빈 곳에 넣어주면 됩니다. 근데 빈곳이 없고 전부 차있다면? 제일 적은 시간동안 충전하는 콘센트에 다시 충전하려고 꽂아주면 됩니다.그렇게 계속해서 비교해가면서 충전을 계속한 결과, 가장 긴 충전시간이 걸린 콘센트를 구하면 답이 나옵니다.우선순위 큐를 이용해서 가장 긴 충전시간을 구했고, 배열을 이용해서 계속해서 비교를 했습니다. 아마 더 나은 방법이 존재할 텐데 콘센트의 길이 입력..
[C++/20002] 사과나무 ⛔ 단순히 기록용 입니다... 어떻게 풀었는가 생각도 다시 해보고 그러니까 아마도 도움은 안되실 것 같습니다.요즘 골드 4~5 문제를 푸는데, 이건 저번에 풀었었는데 solved에 로그인하지 않아서 이전에 풀었던 문제였던 것이였다. 하지만, 아주 새로운 방식으로 문제를 해결했다.Dp + 구현으로 문제를 해결했습니다. 일단 N의 크기가 300이고 총 90,000이여도 1000만큼 곱해도 int의 범위를 벗어나지 않으니 상관이 없고, 대신 모든 정사각형의 범위를 다 따져야하기 때문에, 1부터 300까지 (0,0)부터, 전부를 뒤져봐야하기 때문에 단순 for문으로는 어마무시한 시간이 무조건 걸린다 판단해서, Dp인 누적합으로 미리 합을 구해놓고 문제를 해결했습니다. 오랜만에 Dp를 풀어보니까 아주 머리가 안돌..