목록알고리즘/백준 (341)
어흥
문제 링크: www.acmicpc.net/problem/20057 20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 1. 주의할 점 - 토네이도는 1칸씩 계속 움직인다 - 현재 진행방향 기준으로 어떤 방향으로 얼마만큼 퍼지는지 미리 구해놓는다 - 주석으로 '중요' 표시한 2줄의 코드가 중요하다 2. 구현 - 모래밭에 대한 정보를 Arr[][] 배열에 담는다 - 8방향에 대한 정보를 dx[], dy[]에 미리 저장한다 - Order[] 배열을 통해 토네이도의 진행방향을 저장해놓는다 ..
문제 링크: www.acmicpc.net/problem/5213 5213번: 과외맨 첫째 줄에 N이 주어진다. (1 ≤ N ≤ 500) 다음 줄부터 N*N-N/2줄(/는 정수 나눗셈이다)에는 두 양의 Ai와 Bi가 주어진다. (1 ≤ Ai, Bi ≤ 6, 1 ≤ i ≤ N * N - N / 2) 타일 i의 왼쪽에 쓰여 있는 숫자는 Ai, 오른 www.acmicpc.net 1. 주의할 점 - 타일에 대한 정보를 어떻게 저장하고 불러올 것인가 - 주변 타일을 어떻게 구할 것인가 - 끝까지 도달 못할 경우, 가장 번호가 큰 타일을 목적지로 한다 - 경로를 어떻게 저장할 것인가 2. 구현 - Arr[][]배열을 통해 각 타일에 대한 정보를 저장한다 - y와 x 벡터를 통해 각 타일이 2줄을 간격으로 Arr[][..
문제 링크: www.acmicpc.net/problem/16940 16940번: BFS 스페셜 저지 올바른 순서는 1, 2, 3, 4와 1, 3, 2, 4가 있다. www.acmicpc.net 1. 주의할 점 - 입력의 시작으로 1이 들어오는지 확인한다 - 2-2번의 조건을 정확히 처리한다 2. 구현 - 모든 간선에 대한 정보를 V[] 벡터에 저장한다 - 입력 받는 경로를 Order 벡터에 저장한다 - Finish[] 배열을 통해 방문했는지 체크한다 - inQueue[] 배열을 통해 현재 Queue에 있는지 확인한다 - Cnt를 통해 현재 비교해야 하는 번호를 가라킨다(Order[cnt]) - 큐에 1을 넣고 BFS를 시작한다. While문의 종료 조건으론 Queue가 비었거나 불가능한 경우다 - 현재 ..
문제 링크: www.acmicpc.net/problem/20056 20056번: 마법사 상어와 파이어볼 첫째 줄에 N, M, K가 주어진다. 둘째 줄부터 M개의 줄에 파이어볼의 정보가 한 줄에 하나씩 주어진다. 파이어볼의 정보는 다섯 정수 ri, ci, mi, si, di로 이루어져 있다. 서로 다른 두 파이어볼의 위치 www.acmicpc.net 1. 주의할 점 - 매 TC, While문마다 초기화를 잘 수행해준다 - 범위밖으로 벗어나는 경우에 대한 처리를 잘 수행한다 - 주어진 규칙대로 전부 정확히 구현한다 2. 구현 - 범위밖으로 벗어나는 경우, 반대 방향으로 삽입되도록 구현한다 - 모든 파이어볼에 대한 정보를 Fire 벡터에 담는다 - Arr[][] 벡터 배열을 통해 파이어볼의 이동이 끝난 후, ..
문제 링크: www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 1. 주의할 점 - 순서대로 구현을 정확히 한다 - While문을 돌때마다 초기화를 잘 수행한다 - While문의 종료조건을 명확히 설정한다 - 매 TC마다 전역변수를 초기화한다 → 실제 시험에선 초기화한다 - 최대한 1시간이내로 풀려고 한다 2. 구현 - Info 구조체를 통해 상어에 대한 정보를 Shark[]에 담는다 - Info2 구조체를 통해 향수..
문제 링크: www.acmicpc.net/problem/6059 6059번: Pasture Walking The N cows (2 b>>val; arr[a][b]=val; arr[b][a]=val; } floyd(); for(int i=0;i>a>>b; cout
문제 링크: www.acmicpc.net/problem/2479 2479번: 경로 찾기 길이가 같은 두 개의 이진수 코드 A와 B가 있다고 하자. 이 두 코드 사이의 해밍 거리는 A와 B의 각 비트를 왼쪽부터 오른쪽으로 차례대로 비교할 때 서로 다른 값을 가진 비트의 수이다. 예를 들 www.acmicpc.net 1. 주의할 점 - 다익스트라 알고리즘 + 경로 찾기 알고리즘에 대해 알고 있어야 한다 2. 구현 - 코드를 li 리스트에 담는다 - calHamilton() 함수를 통해 각 코드 사이의 해밀턴 거리를 Arr[][]에 저장한다 - Dijkstra() 함수를 통해 시작점부터 목표지점까지의 최단거리를 구한다. 이때, 두 코드간의 최단거리가 갱신된다면 Pre[]함수를 통해 이전 경로를 저장한다. 만약..
문제 링크: www.acmicpc.net/problem/14395 14395번: 4연산 첫째 줄에 정수 s를 t로 바꾸는 방법을 출력한다. s와 t가 같은 경우에는 0을, 바꿀 수 없는 경우에는 -1을 출력한다. 가능한 방법이 여러 가지라면, 사전 순으로 앞서는 것을 출력한다. 연산의 아 www.acmicpc.net 1. 주의할 점 - 출력에 있어 3가지의 경우가 있다 - 정답이 여러개인 경우, 사전순으로 앞선 경우를 출력한다 2. 구현 - BFS를 통해 정답을 도출한다 - 최대 범위가 10^9이므로 곱셈 혹은 덧셈의 결과가 10^9를 넘기지 않도록 한다 - 사전순으로 빠른 순서대로 BFS 탐색을 시작하며, 연산 결과의 숫자가 존재하지 않는 경우, Set과 큐에 추가한다 - 큐에서 꺼낸 원소가 Targe..