본문 바로가기

분류 전체보기

(236)
C++[백준]10757번 큰 수 A + B https://www.acmicpc.net/problem/10757 10757번: 큰 수 A+B 두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오. www.acmicpc.net 솔루션 10^10000의 자릿수를 더할려면 C++로는 long long int로 받아도 오버플로우가 일어난다. 따라서 문자열로 받아서 덧셈을 해 주어야 한다. 1. 각각의 문자열을 입력 받고 뒤집어 준다. 2. 문자열의 자릿수를 맞춰주기 위해서 자릿수가 같아질 때 까지 0을 넣어준다. 3. 각각의 자릿수를 더해 가며 올림수를 올려준다. 코드 #include #include #include using namespace std; string str1, str2; string ans; void sum() { /..
C++[백준]10217번 KCM Travel https://www.acmicpc.net/problem/10217 10217번: KCM Travel 각고의 노력 끝에 찬민이는 2014 Google Code Jam World Finals에 진출하게 되었다. 구글에서 온 초대장을 받고 기뻐했던 것도 잠시, 찬찬히 읽어보던 찬민이는 중요한 사실을 알아차렸다. 최근의 대세 www.acmicpc.net 솔루션 이전에 도로포장을 풀고 이번 문제를 풀어서 그런가, 접근 법은 역시나 똑같다. 2차원 배열을 선언하는데 [걸린 비용][공항] = 시간 으로 값을 채워주면 풀린다. (풀이법은 도로 포장을 풀어보자.) 코드 #define INF 2100000000 #include #include #include using namespace std; struct edge {..
C++[백준]1162번 도로포장 https://www.acmicpc.net/problem/1162 1162번: 도로포장 첫 줄에는 도시의 수 N(1 ≤ N ≤ 10,000)과 도로의 수 M(1 ≤ M ≤ 50,000)과 포장할 도로의 수 K(1 ≤ K ≤ 20)가 공백으로 구분되어 주어진다. M개의 줄에 대해 도로가 연결하는 두 도시와 도로를 통과하 www.acmicpc.net 솔루션 문제를 보고 2차원 배열을 떠 올렸다. 일반적인 다익스트라를 2차원으로 확장시킨 문제이다. 나는 2차원 배열을 통해 도로 포장을 몇 번 했고, 그 때의 지점에 최소값을 배열에 저장하였다. 다음 지점의 값을 배열에 넣을 땐, 현재지점까지 걸린 값 + 다음 지점으로 가는 데 걸리는 값 (포장 횟수는 그대로) 현재지점까지 걸린 값 (포장 횟수는 +1) 해주어서..
C++[백준] 5719 거의 최단 경로 https://www.acmicpc.net/problem/5719 5719번: 거의 최단 경로 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 장소의 수 N (2 ≤ N ≤ 500)과 도로의 수 M (1 ≤ M ≤ 104)가 주어진다. 장소는 0부터 N-1번까지 번호가 매겨져 있 www.acmicpc.net 솔루션 처음에는 최단으로 도달 할 수 있는 경로 한개에 대해서만 방문하지 않도록 처리 하였는데, 알고보니, 최단 경로 모두 다 탐색하지 못하도록 하여야 한다. 1. 먼저 시작점을 기준으로 다익스트라를 돌리고, 2. dfs를 통해서, 특정 경로를 선택해서 목적지에 가중치가 넘지 않고 도달 가능하면 해당 경로를 bool 배열을 통해 true 로 바꿔준다. 3. 모든 최단..
C++[백준]2211번 네트워크 복구 https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 솔루션 처음에 MST 알고리즘을 썼다가... 맞왜틀 생각하고, 질문 글을 보고 나서야 깨달았다... 이런 문제가 코테에 나온다면.. 눈물 주륵이다. 다익스트라를 돌리면 되는데, 나는 처음에 슈퍼 컴퓨터가 1번이라는 것도 모르고, 어떻게 풀지? 플로이드 와샬인가? 싶었는데 자세히 보니 1번이 슈퍼 컴퓨터...라고 되어있다. 1번은 기준으로 다익스트라를 돌리면, 정답을 받게..
C++[백준]10473번 인간 대포 https://www.acmicpc.net/problem/10473 10473번: 인간 대포 입력은 한 개의 길찾기 문제를 표현한다. 첫 줄에는 두 개의 실수가 입력되며 각각은 당신이 현재 위치한 X, Y좌표이다. 두 번째 줄에는 목적지의 X, Y좌표가 실수로 입력된다. 이어지는 줄에는 대 www.acmicpc.net 솔루션 이 문제를 보고 다익스트라를 떠올리기 조금 힘들었지만, 다익스트라를 떠 올렸다면, 접근 방법은 아래와 같다. 먼저 시작점, 끝점을 입력 받고, 각각의 대포 정점을 입력을 받게 된다. 시작점을 기준으로 각각의 대포까지의 거리를 우선순위 큐에 넣어준다. (그리고 끝점과의 거리도 비교 해 준다) 그리고 우선순위 큐를 빼면서, 모든 대포까지의 거리를 비교 해 준다. (갈 때, 해당 거리를 ..
C++[백준] 1316번 그룹 단어 체커 https://www.acmicpc.net/problem/1316 1316번: 그룹 단어 체커 그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때 www.acmicpc.net 솔루션 문자열을 입력을 받고, 해당 알파벳들을 방문처리를 한다. 만약 특정 지점에서 이미 방문 된 알파벳이 나왔는데, 그 알파벳이 이전 알파벳과는 다르다면 그룹 단어의 갯수를 줄인다. 각 테스트 케이스에서 그룹단어가 아닌 개수를 빼고 난 나머지를 출력한다. 코드 #include using namespace std; int main() { ios_base::sync_..
C++[백준]1989번 부분배열 고르기 2 https://www.acmicpc.net/problem/1989 1989번: 부분배열 고르기 2 크기가 N(1 ≤ N ≤ 100,000)인 1차원 배열 A[1], …, A[N]이 있다. 어떤 i, j(1 ≤ i ≤ j ≤ N)에 대한 점수는, (A[i] + … + A[j]) × min{A[i], …, A[j]}가 된다. 즉, i부터 j까지의 합에 i부터 j까지의 최솟값을 곱 www.acmicpc.net 솔루션 일전에 https://www.acmicpc.net/problem/2104 "부분배열 고르기" 문제를 푼 기억이 있어서 이를 참고해 풀었다. 이 문제를 스택을 이용해서 푼다면 (히스토그램) 더 빠르겠지만, 나는 조금 더 이해가 쉬웠던 분할 정복으로 해결했다. 먼저 시작점, 끝점을 받아서 중간 값을 ..