algorithm/Graph Search 16

백준 2636 치즈

https://www.acmicpc.net/problem/2636 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 📌 해결과정 정말 삽질을 길게 했던 문제다,, 우선 탐색을 하기 전 구멍이 뚫린 영역을 찾아서 그 영역을 2로 바꾼다. 그 다음 탐색을 하는 과정에서 4방향 중에 공기와 닿는 치즈가 있으면, 즉 4방향 중에 0인 좌표가 있으면 녹이려고 했다. 하지만 이 과정은 문제가 많다. 구멍을 뚫린 영역만 찾아서 2로 바꾸는게 정말 쉽지 않다. 그래프의 각 좌표를 방문 하다가, 값이 1인 좌표를 만난다 -> 방문해서 ..

백준 2573 빙산

https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 📌 시간을 많이 쓴 이유 시간초과를 해결하느라 시간을 좀 많이 썼다.. pypy3 으로 제출해도 시간초과가 나서 음..큰일났네 생각하고 문제점을 찾기 시작했다. 시간초과 해결순서 iceberg_melts() 라는 함수를 만들어서 1년마다 그래프를 돌면서 상하좌우에 0이 있으면 -1 을 해준다 -> visited 2차원 배열을 만들어서 중복해서 녹일수 없도록 한다 -> year를 1증가지키고 ..

백준 5014 스타트링크

https://www.acmicpc.net/problem/5014 5014번: 스타트링크 첫째 줄에 F, S, G, U, D가 주어진다. (1 ≤ S, G ≤ F ≤ 1000000, 0 ≤ U, D ≤ 1000000) 건물은 1층부터 시작하고, 가장 높은 층은 F층이다. www.acmicpc.net 📌 해결 과정 https://hwdev.tistory.com/15 [백준] 파이썬 1697 : 숨바꼭질 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동 hwdev.tistory.com 이 문제와..

백준 13549 숨바꼭질 3

https://www.acmicpc.net/problem/13549 13549번: 숨바꼭질 3 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 📌 해결순서 이번에 풀 때도 마찬가지로 times 배열을 만들어서 방문 표시와 걸리는 시간의 표시를 같이 묶어서 하려고 했는데 이 문제에서는 그렇게 하면 안된다. 5에서 첫 번째 이동을 예시로 들면 (4, 6, 10) 으로 이동할 수 있는데 4, 6 은 시간이 +1 되기 때문에 상관이 없지만 10은 방문 했음에도 불구하고 +0을 하기 때문에 여전히 방문하지 않은것..

백준 2583 영역 구하기

https://www.acmicpc.net/problem/2583 2583번: 영역 구하기 첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오 www.acmicpc.net 복잡해 보이는 것 같지만, 사실 이전에 풀어봤던 안전영역과 유기농 배추 등등,, 의 기본 그래프 탐색 문제와 비슷하다 근데 좀 오래 걸렸는데 변명 아닌 변명을 좀 해보자면.. 1. 문제에서 좌표를 주길래 2차원 배열을 만들 때, 행과 열에 주어진 m, n에 각각 + 1 을 했음 2. 하지만 만든 배열의 인덱스만 사용해도 되는 문제였다,, 좌표가 아닌 영역을 묻는 문제이기 때문에..

백준 14889 스타트와 링크

https://www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net 처음 풀어보는 삼성 sw 역량 기출문제! 중간에 이것저것 테스트 파일 만들어서 확인해본다고 약 1시간 정도 소요 됐던거 같다 문제를 해결하기 위한 키워드는 크게 2가지로 볼수 있다 📌 해결순서 1. 팀 나누기 팀을 어떻게 나눌까 생각하다가 백준에 있는 백트래킹 기초 문제중에 n과 m 시리즈가 있다 1 부터 n 까지의 자연수중에 중복없이 m개의 수를 고르는 문제인데 이걸 사용해서 풀었다 문제에서는 번호를 1 부터 N 까..

백준 1012 유기농 배추

https://www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 www.acmicpc.net 📌 해결순서 이 문제는 bfs 보다는 dfs가 더 깔끔한 풀이가 나오는듯 싶다 dfs는 재귀함수 구조이기 때문에 파이썬으로 백준 문제를 푸는데 dfs로 해결해야겠다 싶으면 대부분 sys.setrecursionlimit(10000) 이 코드를 추가 해줘야한다. 파이썬은 기본적으로 재귀함수 호출제한을 1000으로 두는데 백준에서 테스트 케이스 검사를 받다보면 1000번 넘게 dfs를 호출해야 하는 경우가 있다. ..

백준 2468 안전영역

https://www.acmicpc.net/problem/2468 2468번: 안전 영역 재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는 www.acmicpc.net 📌 해결순서 처음에는 for i in range(1, max_height) 이렇게 비가 오는 높이를 1부터 시작했는데 런타임 에러가 났다 생각해보니까, 모든 지역의 높이가 1이면 비가 안와야지 안전영역의 갯수가 최대가 되기 때문에 비의 높이를 0부터 시작해야 했다. 1. 0부터 모든 지점중 최대 높이까지만 dfs 탐색을 진행한다. 최대 높이가 9인 경우, 비의 높이가 9라면 모든 지점이 잠기기 때문에 안..

백준 7576 토마토

https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 📌 해결순서 1. 탐색을 시작하기전에 먼저 0일째에 이미 익은 토마토의 좌표를 que에 추가한다 2. 그 다음에, day를 +1 해주는 기준을 어떻게 잡을지 정말 많은 고민을 했는데 ex) 0일째에 익은 토마토의 갯수가 2라면 len(que) = 2 cnt = 0 으로 시작 1개의 토마토에 의해서 익은 토마토의 갯수가 3이면 que에는 추가로 3개의 좌표가 저장 cnt += 1 해..

백준 1697 숨바꼭질

https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 📌 해결순서 문제의 범위를 확인하는것이 중요하다!! 수빈이의 위치가 0에서 출발한다면 -1, +1, *2 총 3가지의 경우가 있기 때문에 수빈이가 -1 위치로 이동하기 때문에 문제의 조건에서 벗어나게 된다. 따라서 문제의 범위에 대한 조건을 추가로 만들어 줘야한다 MAX = 10 ** 5 for nx in (x - 1, x + 1, x * 2): if 0