목록BOJ (339)
어흥
문제 링크: www.acmicpc.net/problem/13911 13911번: 집 구하기 첫줄에는 정점의 개수 V(3 ≤ V ≤ 10,000)와 도로의 개수 E(0 ≤ E ≤ 300,000)가 주어진다. 그 다음 E줄에 걸쳐 각 도로를 나타내는 세 개의 정수 (u,v,w)가 순서대로 주어진다. 이는 u와 v(1 ≤ u,v ≤ V)사 www.acmicpc.net 1. 주의할 점 - 우선순위큐를 사용한 다익스트라를 이용하지 않은 경우 TLE가 날 확률이 크다 - 조건들을 잘 살핀다 2. 구현 - 모든 간선에 대한 정보를 입력 받아서 V[] 벡터에 넣는다 - Dist[][]배열을 전부 최대로 초기화한 이후, 맥세권과 스세권을 다익스트라 알고리즘을 통해 구한다 - 집에서 맥세권과 스세권까지의 최대거리를 넘지 ..
문제 링크: www.acmicpc.net/problem/1092 1092번: 배 첫째 줄에 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄에는 각 크레인의 무게 제한이 주어진다. 이 값은 1,000,000보다 작거나 같다. 셋째 줄에는 박스의 수 M이 주어진다. M은 10,000보 www.acmicpc.net 1. 주의할 점 - 정렬을 한다 - 해당 크레인이 자신이 들 수 있는 무게보다 적고, 해당 크레인만 들 수 있는 박스 수를 통해 해결한다 - 가장 무거운 박스의 무게가 크레인이 들 수 있는 가장 무거운 무게를 넘어서면 -1을 출력한다 2. 구현 - 입력받은 크레인이 들 수 있는 무게(Crane), 박스의 무게(Box)를 오름차순으로 정렬한다 - Avail[i] 배열에는 i-1번 크레..
문제 링크: www.acmicpc.net/problem/10216 10216번: Count Circle Groups 백준이는 국방의 의무를 수행하기 위해 떠났다. 혹독한 훈련을 무사히 마치고 나서, 정말 잘 생겼고 코딩도 잘하는 백준은 그 특기를 살려 적군의 진영을 수학적으로 분석하는 일을 맡게 되었�� www.acmicpc.net 1. 주의할 점 - 유니온 파인드를 사용할 경우, 부모를 저장하는 Par[] 배열이 항상 갱신되도록 해야한다 - 사용하는 메모리들에 대한 초기화를 잘 한다 2. 구현 - 입력받음과 동시에 Par[] 배열을 초기화하며 입력받은 데이터들을 V벡터에 넣는다 - 각 통신탑과의 거리를 구하여 반지름의 합보다 작거나 같다면 같은 진영으로 판단 -> Make_union() 함수를 수행한다..
문제 링크: www.acmicpc.net/problem/3273 3273번: 두 수의 합 n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 www.acmicpc.net 1. 주의할 점 - 딱히 없다... 배열을 이용하여 A + B = X를 만족하는 B(=X-A)를 찾아도 된다 2. 구현 - 정렬을 통해 수를 오름차순 정렬시킨다 - 양끝에서 시작하는 투포인터로 접근한다 - While문이 끝나는 경우로는 l이 r과 같거나 크면! (같다고만 하면 런타임 에러 발생할 수도 있다. 아래에 예시가 존재!) 더보기 2 1..
문제 링크: www.acmicpc.net/problem/8911 8911번: 거북이 첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 컨트롤 프로그램이 주어진다. 프로그램은 항상 문제의 설명에 나와있는 네가지 명령으로만 이루어져 www.acmicpc.net 1. 주의할 점 - 시작은 0,0이고 북쪽방향을 보고 있다 2. 구현 - 시작점, 시작방향 그리고 최대 X,Y와 최소 X,Y를 전부 0으로 초기화한다 - 방향을 전환하는 경우에는 X,Y의 최대최소를 구하지 않아도 된다 #include #include #include using namespace std; int dx[4] = { 0,1,0,-1 }; int dy[4] = { -1,0,1,0 }; int main..
문제 링크: www.acmicpc.net/problem/1965 1965번: 상자넣기 정육면체 모양의 상자가 일렬로 늘어서 있다. 상자마다 크기가 주어져 있는데, 앞에 있는 상자의 크기가 뒤에 있는 상자의 크기보다 작으면, 앞에 있는 상자를 뒤에 있는 상자 안에 넣을 수가 �� www.acmicpc.net 1. 주의할 점 - DP를 이용하여 푼다 2. 구현 - 현재 상자를 기준으로 왼쪽에 위치한 상자들만 생각한다 - 현재 상자보다 크기 작으면서, DP[] 값이(들어갈 수 있는 상자의 수) 가장 큰 수를 Maxi에 저장한다 - Maxi+1을 현재 상자번호에 해당하는 DP[] 배열에 할당한다. 할당 이후, Result의 값과 비교하여 최대값을 Result에 저장하도록 한다 #include #include u..
문제 링크: www.acmicpc.net/problem/1800 1800번: 인터넷 설치 첫 번째 줄에 N(1 ≤ N ≤ 1,000), 케이블선의 개수 P(1 ≤ P ≤ 10,000), 공짜로 제공하는 케이블선의 개수 K(0 ≤ K < N)이 주어진다. 다음 P개의 줄에는 케이블이 연결하는 두 컴퓨터 번호와 그 가격이 차 www.acmicpc.net 1. 주의할 점 - 이분탐색 + 다익스트라를 이용하여 문제를 해결한다 2. 구현 - 2가지의 방법으로 풀었으며, 다익스트라는 우선순위큐를 활용하여 푸는 방법이 훨씬 빠르다 - Result의 값은 -1로 초기화한다(N번 컴퓨터까지 도달하지 못할 경우를 대비) - Dijkstra() 함수만 바뀐다 - 메인 함수에서 케이블선에 대한 정보를 받을 때, 케이블선의 최..
문제 링크: www.acmicpc.net/problem/6443 6443번: 애너그램 N개의 영단어에 대한 모든 가능한 애너그램을 출력한다. 각각의 영단어에 대한 애너그램을 출력할 때, 알파벳 순서로 중복되지 않게 출력한다. www.acmicpc.net 1. 주의할 점 - 문자열의 길이가 최대 몇인지 모른다 -> 배열을 이용해서 풀기 애매하다 - 문자열의 길이가 최대 몇인지 모르므로 Set을 사용하기 애매하다 -> TLE나 메모리초과가 날 수도 있다 2. 구현 - 그리디를 통해 접근한다 - 문자열을 입력받을 때, Sort 작업 수행과 Len을 설정한다 - DFS() 함수를 통해 idx가 문자열 길이-1일때 문자열을 출력한다 - For문을 통해 현재 바꾸려고 하는 위치의 문자와 다른 문자가 같은 숫자라면 ..