분류 전체보기
[코루틴#1] 코루틴 시작하기, runBlocking, launch, delay, suspend
# 시작하며 앱공부를 하다보니까, 아키텍처와 코루틴의 중요성을 알게 됐다. 그래서 책도사고 여러가지 공부할 방법을 고심했는데, 결국 강의하나를 질렀다. 코루틴에 대해서 셜명해주는 강의인데, 공부한 내용을 바탕으로 정리하도록 하겠다. 이번에는 첫강의인 만큼 코루틴이 어떤 것이며 어떻게 사용하는지에 대한 감을 익히는 방법이 주된 내용이었다. 강의에 나온 예제를 바탕으로 중요한 개념들을 정리해볼까 한다. # runBlocking import kotlinx.coroutines.* fun main() = runBlocking { println(Thread.currentThread().name) println("Hello") } runBlocking는 코루틴을 생성하는 함수 중 하나이다. 이것을 코루틴 빌더라고 한..
[백준-2798] 블랙잭 파이썬, 3중 반복문 사용
# 문제 # 풀이 문제를 너무 어렵게 생각했다. 알고리즘 공부를 막 시작한터라 시간복잡도에 얽매이면서 뭔가 코드를 가장 효율적이게 짜야한다는 생각에 휩싸였다. ## 실패한 풀이1 맨 처음에는 백트래킹방법으로 조건에 맞는 가지치기를 하려고 했다. 이것도 틀린 풀이가 될 것 같지는 않았는데, 어제 공부했던 백트래킹인데 막상 구현하려니 헷갈려서 다른 방법을 찾아보려고 했다. ## 실패한 풀이2 이번엔 3중 반복문을 사용하면서 비교하도록 했다. 결국에 이렇게 푸는게 정답이었는데, 나의 뭔지 모르는 자신감이 정답을 산으로 가게 만들었다. 나름 효율성을 생각한다고.. 가장 큰값 하나는 무조건적으로 선택 될 것이라는 말도 안되는 생각이 [예제 입력2] 케이스를 넘지 못하게 했다. 풀면서 생각해보니까 정말 어디서 나온..
[백준-2920] 음계 파이썬, 오름차순 내림차순 판단하기
# 문제 # 풀이 입력조건이 너무 깔끔하기 때문에 여러 경우의 수를 생각할 필요는 없었다. 또한 8개만 입력이 들어오기 때문에 시간복잡도에대한 생각을 하지 않아도 됐다. 오름차순 경우의 수와 내림차순 경우의 수는 8개의 음계를 정렬, 리버스정렬로 리스트를 재생성하고, 비교해주는 풀이방법을 사용했다. # 다른 풀이 전략 그러나 입력이 이렇게 깔끔하지 않는 문제가 존재할 것이고 데이터가 많아진다면 상당히 비효율적인 방법이 될 것이다. 오름차순과 내림차순은 간단하게 앞-뒤 두개의 데이터쌍만을 비교하면 되기 때문에 반복문을 이용해서 두개의 데이터를 비교해 나가면 더욱 효과적일 것이다. 내림차순 Flag와 오름차순 Flag를 각각 만들고 조건에 맞지 않는다면 해당 Flag를 Flase로 바꿔준다. 이후 두개의 플..
[알고리즘] 백트래킹(BackTracking)기법
[알고리즘] DFS(깊이 우선 탐색) 파이썬 [알고리즘] BFS(넓이 우선탐색) 파이썬 구현 , 파이썬으로 그래프 노드 표현하기 # 내용 그래프에서 많이쓰이는 넓이 우선탐색 방법(BFS) 시작 노드로부터 갈 수 있는 노드들을 차례로 방문예정 큐 devforyou.tistory.com # DFS 깊이 우선탐색 방식인 DFS은 스택을 이용하여 가능한 모든 경로의 끝부분까지 탐색한다. 그렇기 때문에 중간에 틀린 길일지라도 끝까지 탐색하기 때문에 경우의 수를 줄이지 못한다. # 백트래킹 Promising을 통해 해당 루트가 조건에 맞는지를 검사한다. Pruning(가지치기)을 통해 족너에 맞지 않으면 해당 path을 더이상 검사하지 않고 다른 루트로 돌아가서 탐색한다. 즉 DFS의 기반으로 깊이 우선탐색을 진행..
[백준-9663] N-Queen 파이썬, 백트랙킹, 파이썬 전역변수, enumerate
# 문제 # 풀이 백트래킹기법을 사용하여 문제를 풀었다. 기존 탐색이나 반복문으로 풀게 되면 중간에 퀸을 놓을 수 없는 경우에도 그 다음에 대한 탐색을 실시할 것이다. 그렇기 때문에 중간에 이미 틀린 길이라면 이 후 반복을 중지하고 그 뒤로 돌아가야한다. 그렇게 하기 위해 백트래킹 기법을 사용해서 문제를 풀었다. 첫 행의 열들은 각각의 시작점이 된다. 그 기점으로 시작해서 가지가 뻗어나가기 때문에 시작위치를 지정해주었다. 이후 dfs를 이용해서 재귀함수로 다시 호출해나가는 방법으로 문제를 풀었다. for candidate_col in range(N): if is_available(cur_row, candidate_col, upper_queen_info): upper_queen_info.append(can..
[알고리즘] 프림(Prim's) 알고리즘 파이썬, 최소신장트리(MST) 찾기, 파이썬 heapq, defaultdic
[알고리즘] 크루스칼(Kruskal) 알고리즘 파이썬, 최소신장트리(MST), union-find기법(union-by-rank, path-compr # 설명 ## 최소신장트리 그래프나 트리 내에서 최소신장트리를 찾을때 사용되는 알고리즘이다. 최소 신장트리(MST)는 그래프상의 모드 노드가 연결된 상태이면서 사이클(순환)구조가 없는 경우를 devforyou.tistory.com # 설명 크루스칼 알고리즘과는 다른 점은, 모든 엣지를 알고있어서 정렬한 후 엣지를 선택했던 이전과는 다르게, 주어진 시작노드로부터 인접 간선을 통하여 노드를 연결하는 것이 다르다. 후보군 간선 리스트(최소힙)를 만든 후, 노드가 선택될때 마다 후보군에 추가한다. 추가한 후보군에서 가장 작은 간선을 선택하여 연결한다. 연결을 확정짓..