Algorithm 115

bfs. 방문 기록의 중요성

#7562번 나이트의 이동 https://www.acmicpc.net/problem/7562 7562번: 나이트의 이동 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 www.acmicpc.net 처음에 짠 코드 for _ in range(int(input())): N = int(input()) now = list(map(int, input().split())) target = list(map(int, input().split())) dr = [1, 2, 1, 2, -1, -2, -1, -2] dc = [-2, -1, 2, 1, -2, -1, 2, 1] queue ..

파이썬. 시간초과의 늪

#7576 토마토 https://www.acmicpc.net/problem/7576 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net M, N = map(int, input().split()) mat = [] visited = [] queue = [] for i in range(N): m = [] b = [] l = input().split() for x in range(M): tmp = int(l[x]) m.append(tmp) if tmp == -1: b.append(True) elif tm..

실버는 무난하게... 아..아니?

#2667번 단지 번호 붙이기 https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net N = int(input()) mat = [[int(x) for x in input()] for _ in range(N)] visited = [[False for _ in range(N)] for __ in range(N)] answer = [] tmp = 0 def search(r, c): global tmp visited[r][c] = True state = mat..

고... 골드가 풀린다!...

그래프 문제를 푸는 날이었다. 먼저 풀었던 아이는 #1260번 DFS와 BFS https://www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net 무난하게 해결! 개념을 확립하는데 큰 도움이 됐다! DFS는 재귀, BFS는 Queue를 통해 해결하는게 가장 좋은 것 같아. 간혹 BFS로 해결하는게 유리한 문제에서 DFS를 사용하면 recursionError이 발생하는데, 파이썬에서 설정한 재귀의 한계깊이에 도달하면 발생하는 문..

내가 느낀 백준알고리즘의 단점

#13023번 ABCDE https://www.acmicpc.net/problem/13023 13023번: ABCDE 문제의 조건에 맞는 A, B, C, D, E가 존재하면 1을 없으면 0을 출력한다. www.acmicpc.net 처음에는 모든 노드가 다음 단계 노드로 연결될 수 있음을 검증하는거라 생각했다. 그래서 엄청 열심히 풀었는데 Recursion Error나와서 진짜 짜증났다... 그래서 검색했더니 그냥 깊이가 4인 노트 찾는거란다....... ABCDE이래서 되게 헷갈렸던.. 백준의 단점이라 하면 부족한 설명이 아닌가 싶다. from operator import ne import sys N, M = map(int, input().split()) graph = [[] for _ in range(..

비트마스크

11723번 집합 https://www.acmicpc.net/problem/11723 11723번: 집합 첫째 줄에 수행해야 하는 연산의 수 M (1 ≤ M ≤ 3,000,000)이 주어진다. 둘째 줄부터 M개의 줄에 수행해야 하는 연산이 한 줄에 하나씩 주어진다. www.acmicpc.net - 원래코드 import sys s = set([]) for i in range(int(input())): cmds = list(sys.stdin.readline().split()) if cmds[0] == "add": s.add(int(cmds[1])) elif cmds[0] == "remove": try: s.remove(int(cmds[1])) except: continue elif cmds[0] == "ch..

골드의 길은 멀고도 험하다

#1248번 맞춰봐 https://www.acmicpc.net/problem/1248 1248번: 맞춰봐 규현이는 멍청하다. 왜냐하면, 1~10까지 수 밖에 모르기 때문이다. 어느 날 규현이 옆을 지나가던 태석이가 규현이를 보고 이렇게 외쳤다. "빵빵!!" 규현이는 "아하!" 하면서 세상에는 빵이란 수도 www.acmicpc.net 이름부터가 재수없었던 문제이다. 내가 멍청해서인지 문제 이해부터 잘 되지 않았다. 위의 스토리는 그냥 시간끌기 및 혼동용이고 밑에 문단만 읽으면 된다. 4 -+0++++--+ 다음과 같은 값이 들어올 경우 위 값을 matrix로 변환할 수 있다 이 2차원 리스트의 의미는 다음과 같다. 첫 입력으로 받은 숫자만큼의 길이를 가진 수열을 구하는게 정답인데 (위의 경우는 4, _ _..

스타트와 링크 링크와 스타트

#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 import sys N = int(input()) matrix = [] for i in range(N): matrix.append(list(map(int, sys.stdin.readline().split()))) def get_sum(team): parts = 0 for i in range(len(team)): for j in range(i+1, len(team)): parts += (ma..

악 DP!!

#14501번 퇴사 https://www.acmicpc.net/problem/14501 14501번: 퇴사 첫째 줄에 백준이가 얻을 수 있는 최대 이익을 출력한다. www.acmicpc.net 여러 방법을 시도했지만 자꾸 부분정답이 나왔다. 부분 정답이 나올 때에는 과감하게 갈아엎는 것도 나쁘지 않다고 생각한다. 나는 잡고 늘어지다가 결국엔 구글링... 솔루션은 신기했다 dp를 거꾸로, 맨 뒤 index부터 접근하는 방식이었다. 아무래도 그렇게 하는게 날짜를 계산하기 쉽겠지... dp의 길이는 날짜보다 1 더 길다. 초기값인 0을 설정해주기 위해서다. 앞서 말했듯 뒤에서부터 진행한다. 현재 날짜 (일을 받은 날짜)에 일을 진행하는 기간(d)을 더했을 때, N을 초과하면 안된다. 초과할 경우에는 (작업을 ..

다음수열, 이전수열

#10972번 다음 수열 https://www.acmicpc.net/problem/10972 10972번: 다음 순열 첫째 줄에 입력으로 주어진 순열의 다음에 오는 순열을 출력한다. 만약, 사전순으로 마지막에 오는 순열인 경우에는 -1을 출력한다. www.acmicpc.net 다음 수열을 구하는 문제이다. 이 전까지는 수열을 구할 때 재귀함수를 활용해 구했다. 내가 알고있던 파이썬으로 수열을 구현하는 방법은 두 가지 였다. 1. itertools 라이브러리 사용하기 : 수열과 조합을 위한 라이브러리이다. 2. 재귀함수 사용하기 : 그래프 탐색 이론에 기반한(?) 형태라고 할 수 있다. 위 두 가지 방법으로는 도저히 해답이 떠오르지 않았다. 그래서 또 검색... (검색 안하는 날이 올까?) Next_per..

728x90