728x90

그래프

728x90

    [11559] Puyo Puyo

    11559번: Puyo Puyo 총 12개의 줄에 필드의 정보가 주어지며, 각 줄에는 6개의 문자가 있다. 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다. www.acmicpc.net 풀이 """ 같은 색 뿌요가 4개 이상 상하좌우로 연결되어 있으면 연결된 같은 색 뿌요들이 한꺼번에 없어진다. 이때 1연쇄가 시작된다. 상대방의 필드가 주어졌을 때, 연쇄가 몇 번 연속으로 일어날지 계산 이때 .은 빈공간이고 .이 아닌것은 각각의 색깔의 뿌요를 나타낸다. R은 빨강, G는 초록, B는 파랑, P는 보라, Y는 노랑이다. 입력으로 주어지는 필드는 뿌요들이 전부 아래로 떨어진 뒤의 상태이다. 몇연쇄가 되는지 출력 '""" im..

    [15683] 감시 (DFS, 백트래킹, 브루트포스)

    15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 분석 cctv 방향 배열 생성 dfs를 통해 격자 탐색 격자를 복사한 뒤, cctv별 방향으로 연속 탐색 후 dfs 수행 그래프 복귀 (방문 처리 초기화) dfs 그래프 초기화 경로탐색(DFS) [1260번] DFS, BFS 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호 kar..

    [16930] 달리기 (BFS)

    16930번: 달리기 진영이는 다이어트를 위해 N×M 크기의 체육관을 달리려고 한다. 체육관은 1×1 크기의 칸으로 나누어져 있고, 칸은 빈 칸 또는 벽이다. x행 y열에 있는 칸은 (x, y)로 나타낸다. 매 초마다 진영이는 www.acmicpc.net 분석 6087 레이저 통신 문제와 유사 시간 초과 시 조건 추가 새 경로의 값이 -1이 아닌 현재 경로보다 작은 경우 break 풀이 """" 매 초마다 진영이는 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 하나 고르고, 그 방향으로 최소 1개, 최대 K개의 빈 칸을 이동한다. 시작점 (x1, y1)과 도착점 (x2, y2)가 주어졌을 때, 시작점에서 도착점으로 이동하는 최소 시간 체육관의 크기 N과 M, 1초에 이동할 수 있는 칸의 최대 개수 K ..

    [6087] 레이저 통신 (BFS)

    6087번: 레이저 통신 크기가 1×1인 정사각형으로 나누어진 W×H 크기의 지도가 있다. 지도의 각 칸은 빈 칸이거나 벽이며, 두 칸은 'C'로 표시되어 있는 칸이다. 'C'로 표시되어 있는 두 칸을 레이저로 통신하기 위해서 www.acmicpc.net 분석 어떤 칸에서 이동할 수 있는 정점은 인접한 네 칸이 아닌 같은 방향 일직선 한번에 이동할 수 있는 방향을 한번에 큐에 넣음 이동 경로가 바뀌면 거울이 필요 거울의 개수 = 직선의 개수 구한 뒤 -1 한 값 (sx,sy) 에서 (ex,ey)로 가는 최단거리를 구하는 문제 풀이 """ W×H 크기의 지도 레이저는 C에서만 발사할 수 있고, 빈 칸에 거울('/', '\')을 설치해서 방향을 90도 회전시킬 수 있다. 빈 칸은 '.', 벽은 '*'로 나타..

    [14221] 편의점 (다익스트라)

    14221번: 편의점 처음 줄에는 정점의 개수 n, 간선의 개수 m이 주어진다.(2 ≤ n ≤ 5,000, 1 ≤ m ≤ 100,000) 다음 m줄에는 a,b,c가 주어지는데 이는 a, b를 잇는 간선의 거리가 c라는 것이다.(1 ≤ a, b ≤ n, 1 ≤ c ≤ 10,000) www.acmicpc.net 분석 각 시작점(편의점)마다 dijkstra 함수를 호출하여 집까지의 최단거리 구해서 비교 : 시간초과 문제에서 구하고자 하는 것은 편의점으로부터 가장 가까운 지점에 있는 집 후보 정점 번호이므로 아무 시작점(편의점)에서 가장 가까운 집 노드 번호만 알면 됨 시작점 (0.4), (0, 5), (0, 6) 모두 힙에 넣어서 dijkstra 실행 1 queue [(0,4), (0, 5), (0, 6), ..

    봉우리 (네방향 탐색, 이중 for 문, all 함수)

    문제 지도 정보가 N*N(1~50) 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다. 5 5 3 7 2 3 3 7 1 6 1 7 2 5 3 4 4 3 6 4 1 8 7 3 5 2 풀이 import sys input=sys.stdin.readline # 격자판 n=int(input()) a=[list(map(int,input().split())) for _ in range(n)] a.insert(0, [0]*n) a.append([0]*n) for x ..