본문 바로가기

알고리즘/백준

(263)
[백준] 2014번 : 소수의 곱 2014번: 소수의 곱 2014번: 소수의 곱 첫째 줄에 K(1 ≤ K ≤ 100), N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 K개의 소수가 오름차순으로 주어진다. 같은 소수가 여러 번 주어지는 경우는 없으며, 주어지는 소수는 모두 541보다 작거나 www.acmicpc.net 🤔 문제분석 우선순위큐로 문제를 해결하였습니다. 배열을 순회하면서 중복된 곱을 피하여 곱셈을 하며 N번 만큼 우선순위 큐에서 꺼내고 넣는다. 중복된 곱을 피하기위해서는 Set자료구조를 활용할 수 있으나, 메모리 초과가 발생하여 다른 방식으로 생각해보아야한다. 아래의 표를보면 파란색을 대칭으로 중복된값이 존재하는것을 볼 수 있다. 2x3, 2x5, 2x7이 있다면 추후 3x2, 5x2, 7x2로 나올 수 있기에 자..
[백준] 2143번 : 두 배열의 합 2143번: 두 배열의 합 2143번: 두 배열의 합 첫째 줄에 T(-1,000,000,000 ≤ T ≤ 1,000,000,000)가 주어진다. 다음 줄에는 n(1 ≤ n ≤ 1,000)이 주어지고, 그 다음 줄에 n개의 정수로 A[1], …, A[n]이 주어진다. 다음 줄에는 m(1 ≤ m ≤ 1,000)이 주어지고, 그 www.acmicpc.net 🤔 문제분석 누적합 + 이분탐색 문제로 누적합의 경우의 수를 모두 구한다음에 하나의 누적합을 순회하면서 다른 하나의 누적합의 경우의 수를 정렬한뒤 이분탐색하여 값을 찾아낸다. 이분탐색을 통하여 좌측 index와 우측 index 를 구한뒤에 (우측 - 좌측)을 통하여 해당 값이 몇개가 있는지 알 수 있다. 💻 코드 import sys import bisect..
[백준] 1781번 : 컵라면 1781번: 컵라면 1781번: 컵라면 상욱 조교는 동호에게 N개의 문제를 주고서, 각각의 문제를 풀었을 때 컵라면을 몇 개 줄 것인지 제시 하였다. 하지만 동호의 찌를듯한 자신감에 소심한 상욱 조교는 각각의 문제에 대해 데드라 www.acmicpc.net 🤔 문제분석 두 가지의 풀이방식이 존재하는데 저번에 풀었던 문제의 유형중에서 완전 똑같은 문제의 유형이라 쉽게 문제를 풀이 하였습니다. 첫번째 방법으로는 서로소 집합을 활용하여 문제를 해결합니다. 서로소 집합으로 풀때에는 컵라면의 개수를 기준으로 내람차순 정렬하고 배열을 순회하면서 해당 노드의 (데드라인, 데드라인-1)을 유니온하여 다음의 리터레이션에서 부모노드를 데드라인-1 을 가르키도록 만들어 여러개를 넣을 수 없게 만듭니다. 두번째 방법으로는 우..
[백준] 1939번 : 중량제한 1939번: 중량제한 1939번: 중량제한 첫째 줄에 N, M(1 ≤ M ≤ 100,000)이 주어진다. 다음 M개의 줄에는 다리에 대한 정보를 나타내는 세 정수 A, B(1 ≤ A, B ≤ N), C(1 ≤ C ≤ 1,000,000,000)가 주어진다. 이는 A번 섬과 B번 섬 사이에 중량제한이 www.acmicpc.net 🤔 문제분석 데이크스트라를 활용하여 문제를 풀면 된다. 간선을 입력받을때에 다 입력받은 뒤에 무게를 기준으로 내림차순 정렬한다. 그 이유는 탐색을할때에 가장 무게가 많이 나가는 다리부터 방문을 해 나아가야 하기때문이다. 첫번째 섬으로부터 시작하여 가장 무게가 많이 나가는 다리부터 방문해나아가면서 방문값을 갱신해 나아간다. 방문을 해나아가면서 두번째 섬에 도착했을때는 방문을 종료하고 ..
[백준] 1135번 : 뉴스전하기 1135번: 뉴스 전하기 1135번: 뉴스 전하기 민식이는 회사의 매니저이다. 그리고, 민식이는 회사의 중요한 뉴스를 모든 직원에게 빠르게 전달하려고 한다. 민식이의 회사는 트리 구조이다. 모든 직원은 정확하게 한 명의 직속 상사가 있다 www.acmicpc.net 🤔 문제분석 깊이우선탐색, 다이나믹프로그래밍 문제의 유형으로 지금까지 접하지 못했던 문제의 유형이다. 최상위노드로부터 리프노드까지 방문한뒤에 자기자신의 값을 갱신하는 깊이우선탐색 방식으로 문제를 해결하였다. 탐색을 해가면서 해당 노드는 자기자신의 자식노드로부터 가장 오래 걸린 시간을 갱신해나아간다. 여기서 자기자신의 자식노드들을 리스트에 담아내고 리스트에 담기전에 자기자신의 자식노드는 걸리는시간이 계산이 되어야한다. 담아낸 리스트로부터 가장 ..
[백준] 2141번 : 우체국 2141번: 우체국 2141번: 우체국 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 X[1], A[1], X[2], A[2], …, X[N], A[N]이 주어진다. 범위는 |X[i]| ≤ 1,000,000,000, 1 ≤ A[i] ≤ 1,000,000,000 이며 모든 입력은 정수이다. www.acmicpc.net 🤔 문제분석 그리디 유형 문제로 마을의 위치 기준으로 오름차순 정렬한뒤에 사람의 수를 더해가면서 (모든 마을사람들의 수 / 2) 보다 커질경우 그 마을은 우체국의 위치가 된다. 마을 사람들이 절반이 되었을때가 우체국의 최적의 위치가 된다. 💻 코드 import sys input = sys.stdin.readline N = int(input()) village =..
[백준] 1826번 : 연료 채우기 1826번: 연료 채우기 1826번: 연료 채우기 첫째 줄에 주유소의 개수 N(1 ≤ N ≤ 10,000)가 주어지고 두 번째 줄부터 N+1번째 줄 까지 주유소의 정보가 주어진다. 주유소의 정보는 두개의 정수 a,b로 이루어 져 있는데 a(1 ≤ a ≤ 1,000,000)는 성경 www.acmicpc.net 🤔 문제분석 데이터를 거리는 오름차순 기름은 내림차순으로 정렬하고, 데이터를 순회하면서 우선순위큐를 활용하여 문제를 해결하였습니다. 배열을 순회하면서 우선순위큐에 기름을 가장 많이 넣을 수 있는 주유소를 넣습니다. 그리고 탱크의 오일이 다 바닥날 수 있는 거리에 도달하면 우선순위 큐에서 기름을 가장 많이 넣을 수 있는 주유소에서 기름을 넣습니다. 여기서 중요한점은 단 한번을 넣을 수 있는게 아니라, ..
[백준] 3649번 : 로봇 프로젝트 3649번: 로봇 프로젝트 3649번: 로봇 프로젝트 각 테스트 케이스마다 한 줄에 하나씩, 구멍을 완벽하게 막을 수 있는 두 조각이 없다면 'danger'를 출력한다. 막을 수 있는 경우에는 'yes ℓ1 ℓ2'를 출력한다. (ℓ1 ≤ ℓ2) 정답이 여러 개인 경우에 www.acmicpc.net 🤔 문제분석 이분탐색 혹은 투포인터로 문제를 해결 할 수 있으나 이분탐색 풀이법으로 문제를 해결하였습니다. 레고를 사이즈 오름차순으로 정렬한뒤에 순회하는데 i번째를 순회할때 (i+1, N)까지 이분탐색을 통하여 (arr[i] + arr[mid])값이 블록의 사이즈랑 맞을경우는 후보에 두고, 블록 사이즈보다 작다면 start를 mid+1로 크다면 end를 mid-1로 두어 좁혀가며 탐색을 한다. 후보들을 모두 구..