본문 바로가기

Algorithm 💡276

[SWEA 5105번] 미로의 거리 from collections import deque t= int(input()) dx = [-1,1,0,0] dy = [0,0,-1,1] answer = [] for _ in range(t): n = int(input()) maze = [list(map(int,list(input()))) for _ in range(n)] visited = [[0]*n for _ in range(n)] for i in range(n): for j in range(n): if maze[i][j] == 2: start_x, start_y = i, j def bfs(x,y): visited[x][y] = -1 queue = deque([(x,y)]) while queue: cur_x, cur_y = queue.popleft(.. 2023. 9. 21.
[백준 17140번] 이차원 배열과 연산 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net r,c,k = map(int,input().split()) arr = [list(map(int,input().split())) for _ in range(3)] answer = 0 def transpose(arr): return list(zip(*arr)) def calculate_row(index): row = arr[index] temp_dict = dict() sorted_row = [] for i in row: if i == 0: continu.. 2023. 9. 19.
[백준 2668번] 숫자고르기 2668번: 숫자고르기 세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절 www.acmicpc.net n = int(input()) graph = [[] for _ in range(n+1)] visited = [False]*(n+1) temp = [] answer = set() for i in range(1,n+1): graph[int(input())].append(i) def dfs(index): global answer for i in graph[index]: if visited[i]: answer |= set(temp) return visite.. 2023. 9. 16.
[백준 9663번] N-Queen 9663번: N-Queen N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. www.acmicpc.net 이번 문제는 크기가 N x N 체스판 위에 퀸 N개를 서로 공격할 수 없도록 배치하는 경우의 수를 구하는 문제이다. 본인은 체스를 좋아하지 않아서 룰을 잘 몰랐는데, 퀸은 상하좌우와 대각선에 있는 말을 공격할 수 있기 때문에 모든 말은 서로 상하좌우와 대각선에 배치할 수 없다. 일단 이 문제는 모든 경우의 수를 구하기 위해서 완전 탐색 기법 중 하나인 DFS를 사용하게 되면 14^14(1 2023. 9. 12.
[백준 15650번] N과 M(2) 15650번: N과 M (2) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net n, m = map(int,input().split()) is_used = [False]*(n+1) temp = [] answer = [] def back(start): if len(temp) == m: answer.append(' '.join(map(str,temp))) return for i in range(start,n+1): if i not in temp: temp.append(i) back(i+1) temp.pop() back(1) for ans in .. 2023. 9. 11.
[백준 15649번] N과 M(1) 15649번: N과 M (1)한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해www.acmicpc.netn, m = map(int,input().split())is_used = [False]*9temp = []answer = []def backtracking(): if len(temp) == m: answer.append(' '.join(map(str,temp))) return for i in range(1,n+1): if not is_used[i]: is_used[i] = True .. 2023. 9. 11.