목록Study/Algorithm (400)
hwooo
https://www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net 풀이 다익스트라 알고리즘을 사용하여 연결된 컴퓨터가 감염되기까지의 시간을 구함. 모든 컴퓨터에 대한 시간을 구한 후, 연결된 컴퓨터 중 감염까지 가장 오래 걸리는 시간을 리턴. 이 때 초기에 설정해둔 시간 (INT_MAX)인 경우 해당 컴퓨터는 감염되지 않음을 확인 가능함. 코드 #include #include #include #include #include using namespace std; ve..
https://www.acmicpc.net/problem/14938 14938번: 서강그라운드 예은이는 요즘 가장 인기가 있는 게임 서강그라운드를 즐기고 있다. 서강그라운드는 여러 지역중 하나의 지역에 낙하산을 타고 낙하하여, 그 지역에 떨어져 있는 아이템들을 이용해 서바이벌을 www.acmicpc.net 풀이 출발 지점에서 모든 나머지 노드까지의 거리를 구한다. -> 다익스트라 알고리즘 사용 구한 최소 거리의 값이 수색 범위 내에 있는 노드의 아이템 수를 구한다. 이 때, 출발지에 따라 얻을 수 있는 아이템의 최대 개수는 달라지므로 모든 노드의 경우를 따져봐야 한다. 코드 #include #include #include using namespace std; int item[101], dis[101]; ..
https://www.acmicpc.net/problem/4485 4485번: 녹색 옷 입은 애가 젤다지? 젤다의 전설 게임에서 화폐의 단위는 루피(rupee)다. 그런데 간혹 '도둑루피'라 불리는 검정색 루피도 존재하는데, 이걸 획득하면 오히려 소지한 루피가 감소하게 된다! 젤다의 전설 시리즈의 주 www.acmicpc.net 풀이 각 지점의 가중치가 다르므로 다익스트라 알고리즘을 사용하였다. (0,0) 지점부터 상하좌우로 이동하며 소요 비용의 최솟값이 갱신될 때마다 큐에 해당 지점을 삽입. 이 때 우선 순위 큐를 사용하여 비용이 가장 적게 든 지점부터 방문하도록 저장하였다. 탐색하며 목표 지점에 도달했을 때 함수 종료 후 값을 출력했다.n번 실행하는 문제이므로 초기화도 까먹지 말아야 한다. 코드 #i..
https://www.acmicpc.net/problem/2903 2903번: 중앙 이동 알고리즘 상근이는 친구들과 함께 SF영화를 찍으려고 한다. 이 영화는 외계 지형이 필요하다. 실제로 우주선을 타고 외계 행성에 가서 촬영을 할 수 없기 때문에, 컴퓨터 그래픽으로 CG처리를 하려고 한다. www.acmicpc.net 풀이 해당 문제는 아래와 같은 규칙을 따른다. N 1 2 3 칸 개수 4 (2*2) 16 (4*4) 64 (8*8) 점 개수 9 (3*3) 25 (5*5) 81 (9*9) 칸의 개수는 2^N의 제곱 형태로 증가하고 점의 개수는 2^N+1의 제곱형태로 증가한다. 따라서 N에 따른 칸의 루트 값(2^N)을 구한 후 여기에 +1을 해준 값의 제곱이 저장해야 하는 점의 개수이다. 코드 #incl..
https://www.acmicpc.net/problem/11005 11005번: 진법 변환 2 10진법 수 N이 주어진다. 이 수를 B진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 코드 #include #include using namespace std; int main() { int N, B; vector V; scanf("%d %d", &N, &B); // 숫자를 36진수 형태로 나눠줌 while (N != 0) { V.push_back(N%B); N /= B; } // 10을 넘어간다면 알파벳으로 바꿔서 출력 for (int i = V.size() - 1; i >..
https://www.acmicpc.net/problem/2745 2745번: 진법 변환 B진법 수 N이 주어진다. 이 수를 10진법으로 바꿔 출력하는 프로그램을 작성하시오. 10진법을 넘어가는 진법은 숫자로 표시할 수 없는 자리가 있다. 이런 경우에는 다음과 같이 알파벳 대문자를 www.acmicpc.net 풀이 B진법의 수를 10진수로 바꿀 땐 각 자리의 수 * B^(자릿수)이므로 해당 공식을 이용했다.뒷자리부터 계산했고, 이 때 마지막 자릿수에 곱해지는 값은 B^0이므로 수의 전체 길이에서 현재 자릿수를 빼주어 맞췄다.또한 N이 문자열로 주어지는 경우 'Z'- 'A' = 25로 문제에서 주어진 'A' = 10 의 조건을 만족하지 못한다. 따라서 +10 을 더해줌 코드 #include #include..
https://www.acmicpc.net/problem/9205 9205번: 맥주 마시면서 걸어가기 송도에 사는 상근이와 친구들은 송도에서 열리는 펜타포트 락 페스티벌에 가려고 한다. 올해는 맥주를 마시면서 걸어가기로 했다. 출발은 상근이네 집에서 하고, 맥주 한 박스를 들고 출발한다. www.acmicpc.net 풀이 편의점에 들를 땐 최대 20병씩 맥주를 채울 수 있음 >> 거리가 1000m 이하일 경우 도달할 수 있음한 번 방문하여 큐에 삽입된 지점은 다시 가지 않음>> 이 부분이 잘 이해가 안 갔는데 1-2의 루트가 있고 1-3-2의 루트가 있으면 1-3-2는 1-2에 포함되므로 안 따져도 되는 듯??이 문제는 루트를 찾는 것이 아닌 갈 수 있는지의 여부만을 물어보는 문제라 이 부분은 안 따져도..
https://www.acmicpc.net/problem/14496 14496번: 그대, 그머가 되어 첫째 줄에 머호가 바꾸려 하는 문자 a와 b가 주어진다. 둘째 줄에 전체 문자의 수 N과 치환 가능한 문자쌍의 수 M이 주어진다. (1 ≤ N ≤ 1,000, 1 ≤ M ≤ 10,000) 이후 M개의 줄에 걸쳐 치환 가능한 문 www.acmicpc.net 풀이 최소 횟수를 구해야 하므로 BFS를 이용, 탐색하면서 원하는 문자가 나올 경우 해당 지점까지의 바꾼 횟수 반환.큐가 비워졌음에도(모든 노드를 탐색했음에도) 함수가 끝나지 않았을 경우 문자를 바꿀 수 없음 -> -1 반환 바꾸려는 문자가 동일한 경우는 예외처리 해줘야 함방문했던 노드는 표기해줘서 여러 번 방문하지 않도록 처리 코드 #include #..