목록알고리즘 (508)
어흥
문제 링크: https://www.acmicpc.net/problem/1238 1238번: 파티 문제 N개의 숫자로 구분된 각각의 마을에 한 명의 학생이 살고 있다. 어느 날 이 N명의 학생이 X (1 ≤ X ≤ N)번 마을에 모여서 파티를 벌이기로 했다. 이 마을 사이에는 총 M개의 단방향 도로들이 www.acmicpc.net 1. 주의할 점 - 초기화를 잘 한다 - 다익스트라 알고리즘을 통해 최단거리를 구한다 - 파티로 가는, 그리고 나가는 거리의 최단거리를 구하기 위해 그래프의 방향이 반대인것도 구해서 벡터 V[][]에 저장한다 2. 구현 - 입력받은 단방향 그래프: 파티 -> 집으로 갈때의 최단거리 - 입력받은 단방향 그래프에서 방향을 반대로: 집 -> 파티까지의 최단거리 - 입력받을 때 단방향그..
문제 링크: https://www.acmicpc.net/problem/4889 4889번: 안정적인 문자열 문제 여는 괄호와 닫는 괄호만으로 이루어진 문자열이 주어진다. 여기서 안정적인 문자열을 만들기 위한 최소 연산의 수를 구하려고 한다. 안정적인 문자열의 정의란 다음과 같다. 빈 문자열은 www.acmicpc.net 1. 주의할 점 - 전부 한번씩 뒤집어서 비교하는 일은 하지 않도록 한다(최악: 2^2000) 2. 구현 - 초기에 문자열을 입력받을 때, Stack에 문자를 1개씩 넣는다. 단, {}와 같이 쌍을 이룰경우, Stack에서 제외한다 - 위의 과정을 통해 안정적이지 못한 문자열이 Stack에 있을때, 가장 위에 위치한 원소 2개씩 뺀다 (문자열의 길이가 짝수이므로 가능하다) - 원소 2개가..
문제 링크: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5V4A46AdIDFAWu SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 1. 주의할 점 - 두 일꾼이 같은 선택된 벌꿀통을 고르면 안된다 - 각 칸을 기준으로 최대 M칸까지 오른쪽으로 골랐을때의 최대 가중치를 저장한다 2. 구현 - Check[][] 배열을 false로 초기화시켜서 같은 벌꿀통을 고르지 않도록 확인하기 위해 false로 전부 초기화한다 - DFS() 사용하여 해당 칸을 골랐을 때 기준으로 최대값을 (가중치의 내림차순 순서로 정의)우선순위큐에..
문제 링크: https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 문제 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 www.acmicpc.net 1. 주의할 점 - 1 ->2, 2,3,4팀인 경우 생각해줘야 한다 (2->3, 3->4, 4->2를 통해 이미 2,3,4는 팀이 생성되었다고 가정) - Deque를 이용한다 2. 구현 - A학생이 어떤 학생과 팀이 되고 싶어하는지를 Arr[A] 배열에 저장한다 - Check[] 배열을 전부 False로 초기화하여 팀 검사가 이루어지지 않았다고 설정한다 - 1~Num 까지의 학생들을 전부 ..
문제 링크: https://www.acmicpc.net/problem/14921 14921번: 용액 합성하기 홍익대 화학연구소는 다양한 용액을 보유하고 있다. 각 용액은 -100,000,000부터 100,000,000사이의 특성 값을 갖는데, 같은 양의 두 용액을 혼합하면, 그 특성값은 두 용액의 특성값의 합이 된다. 당� www.acmicpc.net 1. 주의할 점 - 용액을 합성할 때 항상 사용될 용액 A를 미리 지정해 놓는다 - 이분탐색을 사용한다 2. 구현 - 용액 Num개를 입력 받는다 - For문을 통해 용액 A를 Arr[0]~Arr[Num-1]사이에 모든 용액을 사용한다(사실 Num-2까지만 해도 된다) - 용액 A를 Arr[i]로 골랐다면, Low = i+1, High = num-1을 가리..
문제 링크: https://www.acmicpc.net/problem/14588 14588번: Line Friends (Small) Q개의 줄에 걸쳐 두 선분이 가까운 정도를 출력한다. 만약, 두 선분 사이의 친구 관계가 단절되었다면 -1을 출력한다. www.acmicpc.net 1. 주의할 점 - 2개의 선분이 겹치는 조건을 잘 생각한다 - 플로이드 와샬 알고리즘에 대하여 알고 있어야한다 - 양방향 그래프이므로 플로이드 와샬을 사용할 경우, 배열의 원소를 잘 초기화 해야한다(내 코드의 경우 한번에 2개의 원소를 초기화 해야 한다) 2. 구현 - Arr[][]배열을 전부 987654321로 초기화하며, i==j인 경우에만 0으로 초기화한다 - 각 선분에 대한 정보를 입력받은 후, 2개의 선분(I,J)을 ..
문제 링크: https://www.acmicpc.net/problem/6198 6198번: 옥상 정원 꾸미기 문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으�� www.acmicpc.net 1. 주의할 점 - N^2으로 풀지 않도록 한다 -> TLE 발생 - Stack을 사용하여 풀도록 한다 2. 구현 - 모든 수들을 배열 Arr[]에 입력받으며, 가장 높은 빌딩의 높이+1을 Maxi 변수에 넣는다(가장 오른쪽에 위치한 건물의 오른쪽에 가상의 Maxi 높이만큼의 건물이 있다고 가정하고 풀기 위해 사용한다) - 건물 배열은 1~N에 담았기 때문에 N+1번째 빌딩..
문제 링크: https://www.acmicpc.net/problem/11780 11780번: 플로이드 2 첫째 줄에 도시의 개수 n(1≤n≤100)이 주어지고 둘째 줄에는 버스의 개수 m(1≤m≤100,000)이 주어진다. 그리고 셋째 줄부터 m+2줄까지 다음과 같은 버스의 정보가 주어진다. 먼저 처음에는 그 버스의 www.acmicpc.net 1. 주의할 점 - 플로이드 와샬 알고리즘을 진행하면서 경로를 저장해야 빠르게 문제를 풀 수 있다 - 플로이드 와샬 알고리즘을 진행하면서 새로운 최단 경로가 생성되는 경우, I~K까지의 경로 + K~J까지의 경로를 I~J까지의 경로에 갱신해서 저장한다. 단, K가 2번 입력되지 않도록 설정한다 - 간선의 정보를 입력받을 때, I~J까지의 경로가 1가지가 아닐 수..