BFS 17

[Python/프로그래머스]거리두기 확인하기_[BFS]

https://school.programmers.co.kr/learn/courses/30/lessons/81302 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20221022 - 이번엔 혼자 못품.. 으아아아 혼자 풀었다!!!! 생각한 방법 : 매번 p가 나올 때 마다 bfs를 돌려서 2 이내에 다른 p가 발견되면 answer에 0을 넣자. 코드 : from collections import deque import copy dx = [0,1,0,-1] dy = [1,0,-1,0] def bfs(q,vis,tmp) : isTrue = 1 while q..

[Python/프로그래머스]경주로 건설_[BFS]

https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20221022 from collections import deque dx = [0,1,0,-1] dy = [1,0,-1,0] def solution(board): n = len(board) def bfs(x,y,cost,dir) : vis = [[0]*n for _ in range(n)] vis[0][0] = 1 q = deque([[x,y,cost,dir]]) while q : x,y,co..

[Python/프로그래머스]아이템 줍기_(BFS)

https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 🐾 20220924 테두리 처리 어떻게하지....? 를 생각하다 모르겠어서 구글링했다. 생각보다 간단한 방법을 쓴다. 내부일 경우 0으로 채우고 내부가 아닌경우 0이 아닌지 확인하고(다른 도형의 내부인지) 둘 다 아니면 1을 저장해 모서리라는 것을 알려준다. 그런데 다들 *2를 해서 왜들 이러나... 이해가 안됐는데 아래 참고 블로그를 보고 단번에 이해했다. 경계선이 인접할 경우 의도하지 않은 최..

[Python/프로그래머스]게임 맵 최단거리_(BFS)

https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 정말 쉽다. 그냥 BFS from collections import deque dx = [0,1,0,-1] dy = [1,0,-1,0] def solution(maps): q = deque([[0,0]]) n,m = len(maps), len(maps[0]) while q : x,y = q.popleft() for i in range(4) : nx,ny= x + dx[i], y + dy[i] if 0

[Python/BOJ] 백준 14226 이모티콘_BFS

https://www.acmicpc.net/problem/14226 14226번: 이모티콘 영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만 www.acmicpc.net 뭔가 DFS인것 같아서 DFS로 풀려고했는데 깊이가 너무 깊다고 까였다.... 정답을 찾아보니 다들 BFS로 풀이되어있었다. 최소시간을 구하다보니 그런것 같다. 최솟값 -> BFS 3가지의 연산이 있다. 1. 클립보드에 저장 2. 클립보드의 이모티콘 화면에 저장 3. 화면의 이모티콘 하나 삭제 화면에 있는 이모티콘과 클립보드에 있는 이모티콘의 개수, 그때의 시간 이 3가지의 값을 저장하기위해서 2차..

[Python/BOJ] 백준 1039 교환_(신박한)BFS

BFS를 맨날 이차원 리스트에서만 보다가 이렇게 문자열에서 처리하는 문제를 보니 참 신박하다. vis를 set으로 하여 방문여부를 확인하였다. set은 튜플형태로만 add가 된다. (list는 안됨) 덱에 [n,0]와 vis에 [n,0]이 넣어지면서 시작한다. n은 현재 숫자이고 0은 변경횟수를 의미한다. 1. 덱이 있는 동안 반복한다. 1-1 . 덱에서 왼쪽에 있는 값을 꺼낸다. 1-2. 만약 변화 횟수가 K라면 ans를 갱신한다. 1-3. int는 []으로 접근할 수 없으므로 str -> list로 만들어 하나씩 접근할 수 있도록 만든다. 1-4. 이중 for문을 돌면서 변경할 수 있는 모든 경우를 다 본다. 1-5. 첫번째 자리가 i이고 j의 값이 0인 경우 continue한다. 첫번째 자리에 0이..

[삼성SW역량][Python/BOJ] 백준 17142 연구소3(BFS)

벽의 개수와 바이러스의 공간을 list로 저장한다. combinations를 이용해 활성화시킬 m개의 바이러스를 선택한다. bfs를 이용해 모든 빈곳을 감염시키는 시간을 반환하도록 한다. 0. time 변수 생성 1. vis 배열을 만든다. 2. 바이러스를 deque에 넣고 바이러스의 위치는 vis의 값을 0으로 설정한다. 3. 바이러스가 퍼진다. 3-1. 퍼지는 곳이 빈곳이라면 퍼지고, time 을 갱신 3-2. 퍼지는 곳이 비활성화된 바이러스라면 활성화시킨다. 4. 미리 구해놓은 벽의 개수화 현재 벽의 개수를 비교한다. 5. 만약 다르면 모든 빈곳을 채우지 못한것이므로 무한대를 반환, 아니라면 time 을 반환 코드 : from collections import deque f..

[Python/프로그래머스]단어변환_BFS

https://programmers.co.kr/learn/courses/30/lessons/43163 코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr 1. 초기 큐에는 시작 단어와 변환한 횟수가 들어간다. 2. 하나씩 pop하면서 만약 target일 경우 cnt를 반환 3. target이 아니라면 방문하지 않은 words를 돌면서 한글자만 다른 단어를 찾는다. 4. 이것을 큐에 넣고 방문했음을 표시한다. 코드 : from collections import deque ..

[Python/BOJ] 백준 14442 벽 부수고 이동하기2(BFS)-시간초과에서 삽질하다가 AC

https://www.acmicpc.net/problem/14442 14442번: 벽 부수고 이동하기 2 첫째 줄에 N(1 ≤ N ≤ 1,000), M(1 ≤ M ≤ 1,000), K(1 ≤ K ≤ 10)이 주어진다. 다음 N개의 줄에 M개의 숫자로 맵이 주어진다. (1, 1)과 (N, M)은 항상 0이라고 가정하자. www.acmicpc.net 앞서 벽 부수고 이동하기 를 풀었기에 이 문제를 풀 아이디어는 쉽게 얻을 수 있었다. 💡 방법 vis 배열을 3차원으로 만드는 것이 아니라 입력되는 k에 따라서 차원을 만드는 것이다. 그후 k번 벽을 뚫을 수 있으므로 뚫을 때마다 -1 씩 줄어들도록 코드를 만들었다. 코드는 나와있는 테케의 정답대로 잘 나왔고 제출하였다. 그러나 계속해서 시간초과가 발생하였다. ..

[Python/BOJ] 백준 2206 벽 부수고 이동하기(BFS)

https://www.acmicpc.net/problem/2206 2206번: 벽 부수고 이동하기 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 당신은 (1, 1)에서 (N, M)의 위치까지 이동하려 하는데, 이때 최단 경로 www.acmicpc.net 🐾 20221031 🖌 어떤 생각? 1. 벽을 부쉈는지 안부쉈는지를 저장한는 변수가 필요하겠구나 그래서 덱에 3개의 수가 들어있겠구나 2. 토마토와 달리 숫자가 띄어쓰기 없이 입력되는데 어떻게 리스트 형태로 잘 만들 수 있을까? 3. 그래서 bfs를 어떻게 만들어야하지?! 💡 어떻게 해결하지? 1. 방문여부를 확인하면서 거리를 저장하는 배열 vis를 만들 때 벽의 부서짐 ..