전체 글
-
Flutter #3 카카오맵 연동카테고리 없음 2025. 5. 9. 17:25
로그인을 하고 (구글로그인 연동) 이후 서버에서 회원등록이 안된 회원이라면 403에러를 띄워주고, 앱에서 403에러를 받으면 회원가입 페이지로 넘어가게 하는것이 지난번 포스팅까지 했던 내용이다. 이후 이제 다음 단계로 넘어간다. 출발지와 목적지를 정하기 위해 앱에 지도를 띄워야 한다. 나는 웹뷰를 사용하여 앱에 지도를 띄웠다. 1. 왜 WebView를 사용해 카카오맵을 연동했는가?Flutter에서 지도를 사용하는 방법은 크게 두가지가 있다. Native SDK를 Wrapping한 지도 패키지 사용이방법은 성능과 완성도 면에서 뛰어나지만, 공식적인 SDK는 존재하지 않으며, 서드파티 플러그인도 중단된 상태가 많다.WebView로 카카오 지도 JavaScript API 호출웹뷰 안에서 브라우저처럼 카카오..
-
프로그래머스 - 전력망을 둘로 나누기 (BFS + 완전탐색)Algorithm 2025. 5. 8. 15:41
2차원리스트로 각 노드의 연결정보가 주어지고,연결된 트리노드를 한곳 절단했을 때 두 트리의 노드수 차이가 최소가 되도록 하고 그 차이를 return하는 문제이다. 문제를 보자마자 생각했던 흐름은 하나의 연결(원소 pop하기)을 빼고, 딕셔너리에 저장한 뒤 BFS로 해당 트리의 노드개수를 계산하고 차이를 업데이트 한다.였다. 한쪽 트리만 해줘도 되는 이유는 5개의 노드에서 한트리가 3개라면 나머지하나는 자동으로 2가되고 차이도 당연히 알 수 있기 때문이다. for문으로 크게 감싸 i번쨰 원소를 pop해주고 위의 로직대로 진행해준다.쉬운 문제. from collections import defaultdict, dequedef bfs(graph): queue = deque() visited = se..
-
프로그래머스 - 네트워크 (BFS, 인접행렬)Algorithm 2025. 4. 28. 12:01
BFS/DFS문제는 여러종류가 있습니다.인접행렬, 연결리스트, 2차원배열 등 여러가지 자료형으로 BFS를 응용할 수 있습니다. 이 문제에서는 인접행렬로 네트워크가 주어집니다. 즉 이렇게 주어진다는건1 1 01 1 00 0 1 각 행과 열에 1이 있는 경우 i와 j가 이어져있다는 뜻입니다. 0번째행 1번째열이 1이란뜻은 0노드와 1노드가 이어져있다는 뜻입니다.즉 자기자신과는 무조건 이어져있으니 n, n은 무조건 1입니다.(대각) 저는 인접행렬도 항상 인접리스트로 풀어왔기 때문에 인접리스트로 바꾸어주었습니다. network = [[] for _ in range(n)] for i in range(n): for j in range(n): if computers[i][..
-
프로그래머스 - 퍼즐조각 채우기 (BFS + 시뮬레이션)Algorithm 2025. 4. 27. 19:46
제가 가장 좋아하는(반어법) ** + 시뮬레이션 문제입니다.뇌지컬보단 피지컬을 요구하는 문제입니다. 게임보드와 테이블이 주어집니다. 게임보드는 0은 빈칸 1은 벽입니다.테이블은 1은 조각 0은 빈칸입니다. 테이블에 있는 조각들로 한번 조각을 빈칸에 넣을 시 빈칸없이 꽉 들어가야 하는 조건이 있습니다.즉 빈칸들 그리고 조각들을 정확히 본떠야 합니다. 저는 주로 시뮬레이션문제는 BFS를 사용합니다.이번 문제에서도 본뜰때 BFS를 사용하였습니다. 처음에는 2차원배열로 본뜰지, 어떻게 본뜰지 고민이 많았습니다.그리고 본을 뜬다고 해도 어떻게 빈칸에 넣을지에 대한 고민을 했습니다. 빈칸은 그대로 두고 조각을 대입하려 했지만, 음.. 그렇게 풀어도 될것 같습니다.배열로 두고 각 퍼즐의 아무곳이나 잡고 모든칸을 ro..
-
프로그래머스 - 단어변환 (BFS)Algorithm 2025. 4. 26. 17:23
두번째 전에 올렸던, + - 를 이용한 BFS문제와 매우 흡사하다.일단 최단거리를 찾는거면 거의 99% BFS를 떠올리면 된다. 이번에도 마찬가지로 좌표를 활용한 문제는 아니고, 트리구조를 활용한다. 단어를 하나만 다르게 해서 words리스트안에 있는 단어로 바꿀 수 있다. 그렇게 바꾸다가 타겟 문자열이 나오면 된다.타겟넘버와 거의 문제가 똑같다. 다만 처음에는 멍청하게도.. a부터 z까지 문자열을 set이나 list로 만들어놓고 대입해가면서 풀려고 했는데생각해보니 문자열 비교만 해주고 하나만 다르면 통과시키는 방법이 있었다. 굳이 내가 안맞춰주고 하나만 다른것을 찾으면 되는 것.다만 문자열3개를 한꺼번에 비교하면 안되고 인덱스에 맞춰서 해줘야 한다. 그래서 필요한 함수가 파이썬의 zip이다.zip은 짧..
-
프로그래머스 - 여행경로 (DFS + 백트래킹 + 딕셔너리)Algorithm 2025. 4. 25. 18:39
문제에서[["ICN", "JFK"], ["HND", "IAD"], ["JFK", "HND"]] 이런 형식으로 주기 때문에 키 벨류를 활용하는 딕셔너리가 이 문제에서는 적합하다고 판단했다.리스트로 찾게되면 매번 O(N)이 걸리기 떄문.graph = { "ICN": ["JFK"], "JFK": ["HND"], "HND": ["IAD"]}이렇게 저장해주고, 같은 조건일떄 도착지가 알파벳 순이란 조건이 있기 때문에 정렬도 해주어야 한다. BFS와 DFS의 선택 BFS는 매번 큐에 인접한 노드들을 넣어줘야 하는데, 이문제의 조건들을 모두 같이 적용해줘야한다.예를들면 현재까지 방문한 경로, 남은 티켓, 정렬 우선순위, 모든 티켓을 다썼는지에 대한 여부 등 넘겨주어야 할 정보가 너무 많다. 반면 최단..
-
프로그래머스 - 타겟 넘버 (BFS, DFS 고득점 키트)Algorithm 2025. 4. 24. 12:43
BFS를 생각하면 흔히 격자에서 상하좌우를 탐색하는 알고리즘을 떠올리게 된다.하지만 이는 2차원 격자 문제에서의 BFS응용일 뿐이다. 본질은 BFS란 가장 가까운 상태부터 탐색해 나가는 알고리즘이란 것이다. 트리, 그래프, 문자열, 배열, 상태공간 등 모든 탐색가능한 구조에서 사용 가능하다. 이 문제는 덧셈, 뺄셈 두가지가 가능하다는 점에서 트리구조의 BFS활용을 사용할 수 있다. 2차원 배열의 BFS에서는 상태표현을 x, y 좌표와 상하좌우 4방향으로 한다고 하면,이 문제에서는 현재 인덱스와 누적된 합계를 인잘 넣어주고, 방향은 + - 두가지인 셈이다. 다만 차이점이라면 2차원 배열에서의 움직임은 방문처리를 통해 이미 갔던곳은 못가게해야하지만, 지금 문제같은 경우는같은 수가 나오더라도 +와 -의 조합..
-
[Flutter] #3 구글 로그인과 회원가입 페이지 이동카테고리 없음 2025. 3. 27. 15:30
구글 로그인 연동은 완료하였고, 구글에서 토큰을 받아오면 클라이언트에서 백엔드로 토큰을 전송해준다.백엔드는 받은 토큰으로 서버에 저장되어있는 회원인지 확인한 후 다시 클라이언트로 전송해준다. 이때 만약 회원이 아니라면? 이름, 휴대폰 번호, 나이 의 추가적인 정보를 입력받는 회원가입 페이지로 이동하게 하고, 회원가입처리를 완료시킨다.이후 백으로 해당 data를 보내준다. 그러기 위해 추가적으로 필요한 파일들은 user_model auth_provider signup_screen auth_service(업데이트) 이다. user_model은 사용자 정보를 담기위한 모델이다.구글 로그인에 쓰였던 이메일, 이름, 회원등록정보, 토큰으로 이루어져있다.즉 로그인후 토큰을 백으로 보내주고 다시 백에서 받은 정보들..