728x90
" 백준 3184번 양 문제 파이썬 " 3184번: 양 첫 줄에는 두 정수 R과 C가 주어지며(3 ≤ R, C ≤ 250), 각 수는 마당의 행과 열의 수를 의미한다. 다음 R개의 줄은 C개의 글자를 가진다. 이들은 마당의 구조(울타리, 양, 늑대의 위치)를 의미한다. www.acmicpc.net " 💡 문제 해결 아이디어 " 이번 문제는 R x C 크기의 범위 내에 있는 울타리 범위 내에서 살아남은 양의 수와 늑대의 수를 구하는 문제이다. bfs를 통해 한 울타리 범위 내에 있는 양과 늑대의 수를 체크하고 문제에 주어진 조건대로 양의 수 > 늑대의 수 : 양이 살아남음 늑대의 수 >= 양의 수 : 늑대가 살아남음 이렇게 체크하여 총 살아남은 양과 늑대의 수를 출력하도록 구현하였다. 코드는 다음과 같다...
" 백준 2606번 바이러스 문제 파이썬 " " 💡 문제 해결 아이디어 " 바이러스 문제는 그래프에서 1에 연결되어 있는 노드를 탐색하여 그 갯수를 출력하는 문제이다. 방문한 노드는 visited 배열에 True로 저장하여 중복 탐색하지 않도록 구현한다. 주어지는 입력값을 이용하여 연결 관계 그래프를 생성하고 1번 노드를 시작으로 연결되어 있는 노드의 갯수를 카운트하면 정답을 도출할 수 있다. 예제 입력 값을 통하여 연결 관계 그래프를 생성하면 다음과 같은 그래프가 생성된다. 주의 사항! 입력받은 값들로 그래프를 그릴 때에 방향이 있는 그래프가 아니므로 node1에 node2을 연결해주었다면, node2에도 node1을 추가해주어야 한다. 만약 node1에 node2을 연결하는 작업만 진행한다면 아래와 ..
" 백준 2573번 빙산 문제 파이썬 " " 💡 문제 해결 아이디어 " 이번 문제 해결 아이디어는 코드에 주석으로 달아놓았습니다. 주의 사항 (시간 초과 문제) 이러한 출력 조건이 존재하기 때문에 빙산의 갯수가 0이 된다면 0을 출력하는 코드를 추가해주어야 한다. 그렇지 않으면 시간 초과 오류가 발생하여 문제 풀이에 실패하게 된다. 해당 코드 # 모든 빙산의 갯수가 0이면 0을 출력하도록 year을 0으로 변경하고 반복문을 종료한다. (문제에 존재하는 출력 조건) if tempCnt == 0: year = 0 break # 빙산의 갯수가 0보다 크면 cnt에 빙산의 갯수를 저장 else: cnt = tempCnt 코드 from collections import deque import copy import..
백준 2156번 포도주 시식 문제 파이썬 " 💡 문제 해결 아이디어 " 연속으로 포도주 잔을 선택하는 문제인데 연속으로 2잔만 마실 수 있고 여러 경우 중 최선의 값을 구한다는 점에서 Dynamic Programming 알고리즘 문제라는 점을 알아낼 수 있었다. 문제 해결 방식 : 보텀업 방식 n : 포도주 잔의 개수 arr : 테이블 별 포도주의 양을 담는 변수 dp[i] : i번째 줄까지에서 마실 수 있는 최대 포도주 양 dp 배열 초기화 dp[0] = arr[0] : 2개 연속으로 마실 수 있는데 1개만 있기 때문에 arr[0] 으로 초기화 dp[1] = arr[0] : 2개 연속으로 마실 수 있는데 2개만 있기 때문에 arr[0] + arr[1] 로 초기화 dp[2] = max(arr[0] + a..
" 백준 1926번 그림 문제 파이썬 " " 💡 문제 해결 아이디어 " 1926번 그림 문제는 0과 1로 이루어진 그래프에서 상하좌우가 1로 연결된 그림을 찾아 그 갯수와 그 그림들 중 가장 넓은 넓이를 출력하는 문제이다. for문을 통해 그래프의 0,0 ~ n-1,m-1 까지 전체를 탐색하며 값이 1인 지점을 찾을 때마다 cnt +=1 을 한다. 그리고 값이 1인 지점의 x,y좌표를 bfs로 탐색하여 그 지점에 연결되어 있는 1들을 모두 0으로 변경하며 1이 0으로 변경되는 횟수를 area(넓이) 변수에 +1 해주고 더이상 연결된 1이 없다면 area 변수의 값을 return한다. return받은 area변수는 이전에 서칭한 가장 넓었던 그림의 면적(maxArea 변수)와 비교하여 더 큰 값을 다시 m..
백준 1303번 전쟁 - 전투 문제 이 문제는 전쟁터에서 뭉쳐있는 병사들을 찾아내어 그들의 전투력을 계산하는 문제로 예제 입력을 통해 알 수 있듯이 완전 탐색을 이용해 풀 수 있는 문제이다. 본인은 BFS를 사용하여 문제를 해결하였다. " 💡 문제 해결 아이디어 " 문제는 말했다시피 BFS를 사용하여 해결하였다. 우선 bpower, wpower 변수를 0으로 미리 초기화시켜둔다. 그리고 입력받은 문자열(BWWWB.. 등)은 n개의 문자로 쪼개어 그래프에 한 줄씩 list단위로 저장하여 n X m 형태의 2차원 배열을 생성한다. 그래프 생성이 완료되면 그래프의 0,0부터 m-1,n-1 까지 탐색하면서 B또는 W를 찾는데 만약 해당 좌표의 값이 'B' 또는 'W'라면 bfs를 통해 뭉쳐있는 같은 팀 병사를 ..