본문 바로가기

Algorithm272

[ 파이썬(python) ] 백준 2331 - 반복수열 📌 백준 2331 - 반복수열 문제 설명 💡 나의 풀이 지금까지 2차원 그래프나 리스트를 이용한 문제만 풀었었는데, 1차원의 수 반복을 이용하는 계산은 새로운 접근이 필요했다. 그래서 어떤 탐색을 사용할까 고민하다 BFS를 사용했는데, 감이 잘 잡히지 않았다. 찾아보니까 DFS를 이용하고, 어떤 코드는 아예 DFS를 사용하지도 않았다. 또, DFS를 이용할 때 Flag 방식을 사용하려고 했는데, 오답 판정을 받았다. 현재 값을 파라미터로 전해주지 않아 그런건지.. 도통 이유를 모르겠다. 제일 하단의 fail코드를 보고 왜 안되는지 아시는 고수님들 댓글 부탁드립니다. ㅠㅠ 😂 😂 DFS - 반복 수열을 진행하며 현재 값을 기준으로 다음 원소를 탐색하고, 이전에 나왔던 원소(중복 원소)가 나올 때까지 다음 .. 2021. 4. 17.
[ 파이썬(python) ] 백준 2667 - 단지번호붙이기 📌 백준 2667 - 단지번호붙이기 문제 설명 💡 나의 풀이 아침부터 저녁까지 이 문제만 잡고 늘어졌는데 드디어 풀었다. 😇 😇 특히, 처음에 방문한 좌표를 1로 선언한 이유와, 새로운 좌표를 1로 선언한 이유를 잘 몰라서 엄청 헤맸다. 이 문제는 BFS, DFS 파트에 약한 나에게 많은 도움을 준 문제다. 또, BFS와 DFS로 풀 수 있는데 지금은 BFS버전이고 내일은 DFS로 풀어봐야겠다. 푸는 방법으로 append와 flag방식 두 개로 나눠서 풀었는데 flag 실행시간이 append 보다 4ms정도 더 빨랐다.( 4ms면 별 의미 없는 시간차이긴 하지만, True, False가 근소하게 더 빠르다는 것을 참고적으로 알아두자!) 개별 단지수를 구하는 코드는 고민을 많이 했는데, 결론적으로 {}를 .. 2021. 4. 16.
[ 파이썬(python) ] 백준 1260 - DFS와 BFS 📌 백준 1260 - DFS와 BFS 문제 설명 💡 나의 풀이 BFS와 DFS를 둘 다 사용해야 하는 문제인데 풀이 방법은 다음과 같다. 문제에서 정점 번호가 작은 것을 먼저 방문한다.를 통해 입력값을 인접리스트(adjacent list)으로 넣을 때 sort를 붙여 작은 값부터 들어가게끔 설정했다. dfs의 구현 순서는 다음과 같다. 처음 들어온 값 index의 flag를 True로 바꾼다. 만약, 인접 노드를 방문하지 않았다면(flag = False), 해당 인접노드로 들어가서 방문하지 않은 인접 노드가 없을 때까지 들어간다.(recursive) 재귀문을 탈출하면서 해당 값을 하나씩 출력한다. bfs의 구현순서는 다음과 같다. 처음 들어온 값을 queue에 넣는다. 처음 들어온 값 index의 fla.. 2021. 4. 16.
[ 파이썬(python) ] 이것이 코딩 테스트다 - 음료수 얼려먹기(DFS) 📌 이것이 코딩 테스트다 - 음료수 얼려먹기 영상 링크(42:48) 💡 나의 풀이 DFS로 문제를 해결 할 수 있는데, 0인 값이 상, 하, 좌, 우로 연결되어 있는 노드를 묶으면 된다. BFS, DFS는 조건 설정이 중요한 것 같다. 특정한 지점의 주변 상, 하, 좌, 우를 살펴보고 주변 지점 중 값이 0이면서 아직 방문하지 않은 지점이 있으면 해당 지점을 방문한다. 방문한 지점에서 다시 상, 하, 좌, 우를 살펴보면서 방문을 다시 진행하면, 연결된 모든 지점을 방문할 수 있다. 1~2번의 과정을 모든 노드에 반복하고, 방문하지 않은 지점의 수를 센다. ''' 4 5 00110 00011 11111 00000 ''' ''' 15 14 00000111100000 11111101111110 11011101.. 2021. 4. 15.
[ 파이썬(python) ] 이것이 코딩 테스트다 - 미로 탈출(BFS) 📌 이것이 코딩테스트다 - 미로 탈출 영상 링크(51:30) 💡 나의 풀이 BFS를 이용하는 흐름을 알아야 풀 수 있었는데, 그 흐름을 잘 몰라서 못 풀었다. 이전까지는 입력값을 그래프로 변환해서 풀었는데, 입력값이 이중 리스트일때는 어떻게 줘야 할지 감이 잘 잡히지 않았다. 또, BFS문제를 풀어보니까 값이 어떻게 바뀌는지 흐름을 잡는것이 중요하다고 느꼈다. from collections import deque n, m = map(int, input().split()) graph = [list(map(int, input())) for _ in range(n)] # 상하좌우 선언 dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] def bfs(x, y): queue = deque() .. 2021. 4. 15.