전체 글

문제 링크 https://www.acmicpc.net/problem/2573 2573번: 빙산 첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을 www.acmicpc.net 문제 풀이 def bfs(x, y): q = deque() q.append([x, y]) visited[x][y] = 1 while q: x, y = q.popleft() for dir in range(4): nx, ny = x + dx[dir], y + dy[dir] if 0 0 and not visited[i][j]: num += bfs(i, j) for i in range(n..
문제 링크 https://www.acmicpc.net/problem/9466 9466번: 텀 프로젝트 이번 가을학기에 '문제 해결' 강의를 신청한 학생들은 텀 프로젝트를 수행해야 한다. 프로젝트 팀원 수에는 제한이 없다. 심지어 모든 학생들이 동일한 팀의 팀원인 경우와 같이 한 팀만 있을 www.acmicpc.net 문제 풀이 정답률이 낮은 이유가 있던 문제였습니다. 메모리와 시간의 압박이 쎘습니다,,ㅠㅠ 결국 이 문제의 핵심은 학생들 간 사이클을 파악하는 것입니다. 팀을 이룰 수 있는 경우는 두 가지입니다. 1) 본인이 본인을 선택하는 경우 2) 1 -> 2 -> 3 -> 1 이렇게 이어진 형태로 서로를 지목하는 경우 1번 학생부터 for문을 돌려서 확인했습니다. 지목한 사람을 타고타고 가다가 만약 이..
문제 링크 https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net 문제 풀이 from collections import deque def bfs(): q = deque() q.append([0, 0, k]) visited[0][0][k] = 0 while q: x, y, z = q.popleft() if x == h - 1 and y == w - 1: return visited[x][y][z] if z > 0: for hdir in r..
문제 링크 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 문제 풀이 from collections import deque def bfs(): q = deque() q.append([0, 0, k]) visited[0][0][k] = 1 while q: x, y, z = q.popleft() if x == n - 1 and y == m - 1: return visited[x][y][z] for dir in r..
문제 링크 https://www.acmicpc.net/problem/17298 17298번: 오큰수 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,000,000)이 주어진다. www.acmicpc.net 문제 풀이 앞서 포스팅한 옥상정원 꾸미기와 유사한 방법으로 해결할 수 있었습니다. n = int(input()) nums = list(map(int, input().split())) stack = [] result = [] for i in range(n - 1, -1, -1): num = nums[i] while stack and stack[-1]
문제 링크 https://www.acmicpc.net/problem/6198 6198번: 옥상 정원 꾸미기 문제 도시에는 N개의 빌딩이 있다. 빌딩 관리인들은 매우 성실 하기 때문에, 다른 빌딩의 옥상 정원을 벤치마킹 하고 싶어한다. i번째 빌딩의 키가 hi이고, 모든 빌딩은 일렬로 서 있고 오른쪽으 www.acmicpc.net 문제 풀이 단순히 빌딩 하나씩을 확인하며 더 낮고 오른쪽에 있는 빌딩들을 찾을 수도 있지만 시간 초과의 문제가 발생합니다. 문제의 해결 방안은 반대로 현재 기준의 빌딩이 보여질 수 있는 왼쪽의 높은 빌딩들을 찾아나가는 것입니다. for b in buildings: while stack and stack[-1]
문제 링크 https://www.acmicpc.net/problem/20437 20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다. www.acmicpc.net 문제 풀이 총 2가지를 구해야하는데, 주어진 양의 정수 k개만큼 특정 문자를 포함하는 가장 짧은 문자열의 길이와 가장 긴 문자열의 길이를 구해야 합니다. 최소 길이가 되려면 어차피 문자열의 첫 번째와 마지막 글자가 k개에 포함되는 특정 문자여야 합니다. 결국 처음과 마지막 글자가 특정 같은 문자인 문자열을 구하되 최소길이와 최대길이를 구하면 되는 것입니다. 문제를 해결하기 위해 de..
문제 링크 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 문제 풀이 전형적인 BFS 문제로 문제 조건을 잘 따라가다보면 해결할 수 있는 문제입니다. from collections import deque m, n = map(int, input().split()) graph = [list(map(int, input().split())) for _ in range(n)] visited = [[0] * m for _ in range(..
YOONJELLY
JELLYJELLY