목록분류 전체보기 (32)
hong0708
1. local.propertites에 api key 값 저장하기 이전 gitignore 파일을 수정해야합니다. 아래와 같이 gitignore 파일 코드를 수정합니다. # Gradle files .gradle .gradle/ build/ # Signing files .signing/ # Local configuration file (sdk path, etc) local.properties 2. local.propertites에 api key 값 저장합니다. sdk.dir=C\:\\Users... googleMapKey="1234example1234" 3. build.gradle.kts (Module :app) local.propertites에 있는 값을 가져오는 코드와 manifestPlaceholder..
그래프 그리는 커스텀 뷰 클래스 예제입니다. 직선들을 통한 예제로 부가적으로 필요한 데이터에 맞게 추가하여 직선 그래프를 그리면 해결 가능합니다. package com.example.linegraph import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.graphics.Point import android.util.AttributeSet import android.view.View class CustomLineGraphView(context: Context, attrs: AttributeSet?) : View(con..
https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 초기에 $n+1$개의 집합 $\{0\}, \{1\}, \{2\}, \dots , \{n\}$이 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작 www.acmicpc.net 합집합을 하는 연산과, 두 집합이 포함되어 있는지 판단하는 연산을 수행해야합니다. 이때 두 연산을 통해 분리 집합을 활용해야 풀이가 가능하다는 것을 유추 할 수 있습니다. 분리 집합이란 노드를 합치고, 부모를 찾아 서로소 집합임을 판단 가능하기 때문에 각 연산 수행이 가능합니다. find 함수를 통해 부모를 찾는 과정을 진행하고 union 함수를 통해 두 노드..
Union-Find는 트리구조를 활용해 노드를 합치고 부모를 찾아서 이를 통해 서로소 집합을 찾아내는 알고리즘입니다. find 함수를 통해 부모 노드를 찾을 때 까지 재귀를 활용하여 호출합니다. 이때, 재귀적으로 호출 하면 파이썬의 경우 문제가 생기는 경우가 있는데 이에 대한 내용은 하단에 새로운 코드를 추가하겠습니다. union 함수는 두 노드의 부모노드를 찾고 이를 합치는데 이때 노드의 번호에 따라 합칠 수 있습니다. 두 함수를 수행하기 위해선 해당 노드의 부모노드를 저장하는 리스트를 가지고 있어야합니다. 아래는 위 함수들과 알고리즘을 구현한 예제 코드입니다. n, m = map(int, input().split()) parent = [i for i in range(n)] def find(x): if..
https://www.acmicpc.net/problem/2623 2623번: 음악프로그램 첫째 줄에는 가수의 수 N과 보조 PD의 수 M이 주어진다. 가수는 번호 1, 2,…,N 으로 표시한다. 둘째 줄부터 각 보조 PD가 정한 순서들이 한 줄에 하나씩 나온다. 각 줄의 맨 앞에는 보조 PD가 담당한 www.acmicpc.net n 팀의 가수들의 순서를 모든 조건에 만족시켜 정렬을 하는 문제입니다. 이때, 보조PD들이 해당 정렬에 대한 우선 순위 즉, 방향성을 제공해주고 이를 만족시켜 정렬을 해야합니다. 이부분을 활용하면 위상 정렬을 통해 해답을 도출하면 쉽게 풀이가 가능하다는 점을 추론할 수 있습니다. 뿐만 아니라 위상 정렬을 진행 할 때 큐가 비었지만 모든 노드를 방문하지 않았을 경우 이는 사이클이..
위상 정렬이란 순환(사이클)이 없는 방향 그래프의 모든 노드를 방향성에 위배 하지 않고 나열하는 정렬 알고리즘 입니다. 여기서 알 수 있는 점이 1. 순환이 없다 2. 방향성 즉 우선순위를 판단하여 정렬한다 두점을 알 수 있습니다. 그래프 내부에 사이클이 없다 방향성을 가진 간선으로 이뤄진 그래프이다. 이 점을 봐서 DAG(Direct Acyclic Graph)에서 실행 될 수 있다고 할 수 있습니다. 이 때 문제에서 방향성을 우선순위 즉, 어떠한 테스크에 대해 먼저 선행되어야 할 다른 테스크가 있을 때 활용된다고 생각하고 풀이를 진행하면 좋습니다. 위상 정렬 알고리즘 큐를 활용하여 진입 차수가 0인 노드를 지속적으로 추가합니다. 진입 차수를 측정합니다. 진입 차수는 특정 노드로 들어오는 간선의 수로 특..
https://www.acmicpc.net/problem/1005 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 건물이 지어지는 우선순위가 있고 최종적 목표 건물이 지어질 때 까지 시간을 구해야 합니다. 이때 건물을 짓는 우선순위가 존재하는 것을 토대로 위상정렬 아이디어를 떠올릴 수 있습니다. 어떤 건물이 지어질 때 이전에 먼저 건물을 지어야하는 즉 진입 차수에 대한 내용임을 짐작 할 수 있으니 이를 활용해 풀이를 진행하면 됩니다. 먼저 입력을 받으며 해당 건물의 진입 차수를 측정하고 이후 진입차수가 ..
https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의 www.acmicpc.net 학생들을 키에 따른 줄을 세워야하는 문제입니다. 하지만 각 학생들의 정확한 키가 아닌 크기 비교에 따른 기준만 있습니다. 이에 따라 기준에만 만족하기 때문에 여러 답이 나올 수 있습니다. 이렇게 비교한 결과에 따라 정렬을 할 때 활용 가능한 것이 위상정렬입니다. 위상정렬에 관해선 알고리즘을 따로 후에 다뤄보겠습니다. 먼저 각 학생들의 키 비교 입력을 통해..