목록PS (179)
득이공간
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bpyOuk/btsFp7TbhbC/LLrRzbWb61hsMkK4Ztsdu1/img.png)
15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net #include using namespace std; int N, M; bool Visit[8]; int Seq[8]; void Print() { for (int i = 0; i M; DFS(0); } DFS & 백트래킹 문제입니다. 중복없이 M개를 고른 수열을 출력해야하기 때문에 방문 체크 배열을 따로 관리하면서 각 경우를 탐색하도록 했습니다.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bS1Jp3/btsFvZsHNwx/dBXElMkKKR9JsG5tGP1MqK/img.png)
15686번: 치킨 배달 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸 www.acmicpc.net #include using namespace std; typedef pair location; int N, M, H, C; location House[100]; location Chicken[13]; bool Check[13]; int Min = 1000000000; int GetChickenDistance() { int Sum = 0; for (int h = 0; h < H; ++h) { int Distance = 1000000000; fo..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/QRLbF/btsFnYvw4YP/KZDFjSaNZI3aFLDzElwV90/img.png)
12865번: 평범한 배낭 첫 줄에 물품의 수 N(1 ≤ N ≤ 100)과 준서가 버틸 수 있는 무게 K(1 ≤ K ≤ 100,000)가 주어진다. 두 번째 줄부터 N개의 줄에 거쳐 각 물건의 무게 W(1 ≤ W ≤ 100,000)와 해당 물건의 가치 V(0 ≤ V ≤ 1,000) www.acmicpc.net #include using namespace std; int DP[101][100001]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N, K; cin >> N >> K; for (int i = 1; i > Weight >> Value; for (int w = 0; w
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/wxMYg/btsFp6TghsO/VcM70qdknDySgW6utHtLJk/img.png)
5639번: 이진 검색 트리 트리를 전위 순회한 결과가 주어진다. 노드에 들어있는 키의 값은 106보다 작은 양의 정수이다. 모든 값은 한 줄에 하나씩 주어지며, 노드의 수는 10,000개 이하이다. 같은 키를 가지는 노드는 없다 www.acmicpc.net #include using namespace std; int Tree[10001]; void DFS(int Current, int End) { if (Current > End) { return; } int Mid = End + 1; for (int i = Current + 1; i Tree[Current]) { Mid = i; break; } } DFS(Current + 1, Mid - 1); DFS(Mid, End); cout Tree[i]; if..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Eiv3X/btsFp8jeekp/f29MeNekxLJr8t3dDFm7K1/img.png)
2096번: 내려가기 첫째 줄에 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 N개의 줄에는 숫자가 세 개씩 주어진다. 숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 중의 하나가 된다. www.acmicpc.net #include using namespace std; int Max[2][3]; int Min[2][3]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N; cin >> N; int A, B, C; cin >> A >> B >> C; Max[0][0] = A; Max[0][1] = B; Max[0][2] = C; Min[0][0] = A; Min[0][1] = B; Min[..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dSgs3z/btsFpPDBB17/Bre8qif9ekV5v7uY5vpvY1/img.png)
4386번: 별자리 만들기 도현이는 우주의 신이다. 이제 도현이는 아무렇게나 널브러져 있는 n개의 별들을 이어서 별자리를 하나 만들 것이다. 별자리의 조건은 다음과 같다. 별자리를 이루는 선은 서로 다른 두 별을 일 www.acmicpc.net #include #include #include #include #include using namespace std; typedef pair star; typedef tuple edge; vector Stars; vector EdgeList; int Root[100]; float MakeDistance(const star& A, const star& B) { float AX = A.first, AY = A.second; float BX = B.first, BY =..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/oaD04/btsFoHeJ8n4/yBdPSw5GfbBt8II3CEQER0/img.png)
2623번: 음악프로그램 첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 www.acmicpc.net #include #include #include using namespace std; list Neighbors[1001]; int Entries[1001]; bool Visited[1001]; queue SQ; int Solution[1000]; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int N, M; cin >> N >> M; for (i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/l7A7k/btsFjWc7yxv/KkMvKIMY0FJKgnfWcKQkl1/img.png)
2342번: Dance Dance Revolution 입력은 지시 사항으로 이루어진다. 각각의 지시 사항은 하나의 수열로 이루어진다. 각각의 수열은 1, 2, 3, 4의 숫자들로 이루어지고, 이 숫자들은 각각의 방향을 나타낸다. 그리고 0은 수열의 마 www.acmicpc.net #include #include using namespace std; const int Infinite = INT_MAX; const int MoveCost[5][5] = { { 0, 2, 2, 2, 2 }, { 0, 1, 3, 4, 3 }, { 0, 3, 1, 3, 4 }, { 0, 4, 3, 1, 3 }, { 0, 3, 4, 3, 1 } }; int DP[100000][5][5]; void Init() { for (int i..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ovUeE/btsFkTNRhVa/1tb9iQM5rbPDyzXsMAk9X0/img.jpg)
해당 게시물은 한치근 교수님의 '알고리즘' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 8-1 * 키의 비교만으로 검색하는 경우 하한 * 검색(Searching) 문제 - n개의 키를 가진 배열 S와 어떤 키 x가 주어졌을 때, x = S[i]가 되는 첨자 i를 찾는다. - 만약 x가 배열 S에 없을 때는 오류로 처리한다. * 이분(이진) 검색 알고리즘 - 배열이 정렬이 되어 있는 경우 시간복잡도가 W(n) = lgn + 1이 되어서, 매우 효율적인 알고리즘이라고 할 수 있다. - 키의 비교만으로 검색을 수행하는 경우에는 이분 검색 알고리즘 보다 더 좋은 알고리즘은 존재할 수 없다. * 검색의 결정트리(decision tree) - 큰 마디(내부마디) : 키와 각 아이템을 비교하는 마디..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/v6kqs/btsFhoH6YLa/txmSDqk3uNKjhHtQaqxIC1/img.jpg)
해당 게시물은 한치근 교수님의 '알고리즘' 강의를 수강하며 학습한 내용을 개인적으로 정리한 글입니다. 📌 7-1 * 계산복잡도(Computational Complexity) - 얼마나 많은 계산을 해야지 문제가 풀릴 것인가 * 알고리즘의 분석 - 어떤 특정 알고리즘의 효율(efficiency)을 측정 - 시간복잡도(time complexity) - 공간복잡도(space/memory complexity) * 문제풀이 접근하는 2가지 방법 - 문제를 푸는 더 효율적인 알고리즘을 개발 - 더 효율적인 알고리즘 개발이 불가능함을 증명 * 문제의 분석 - 일반적으로 "계산복잡도 분석"이란 "문제의 분석"을 지칭 - 어떤 문제에 대해서 그 문제를 풀 수 있는 모든 알고리즘의 효율의 하한(lower-bound)을 결..