알고리즘 문제를 풀면서 BFS를 구현할 때, queue를 주로 사용할 것이다. queue를 초기화해주기 위해 보통q = deque([(start_x, start_y)]) # 탐색 시작 노드 큐에 넣기 visited[start_x][start_y] = 0 # 탐색 시작 노드 방문 처리 while q: x, y = q.popleft()이렇게 해주고는 하는데, 이 코드를 q = deque([start_x, start_y]) # 탐색 시작 노드 큐에 넣기 visited[start_x][start_y] = 0 # 탐색 시작 노드 방문 처리 while q: x, y = q.popleft()가끔 이렇게 작성하는 실수를 할 때가 있다. 이렇게 코드를 작성하..
알고리즘 문제를 풀 때, 깊은 복사가 필요할 때가 있다. 그냥 단순한 가변 객체(리스트, 셋, 딕셔너리)를 복사할 때는 얕은 복사 (copy 메소드)로도 주솟값이 다르고 값만 같은 객체를 복사할 수 있지만 만약에 리스트 안에 리스트가 있는 복잡한 경우에는 깊은 복사를 활용해야 한다. 이 때, copy 모듈의 deepcopy를 사용하면 쉽게 깊은 복사를 할 수 있지만 시간이 많이 걸린다는 단점이 있다. 이럴 때는 깊은 복사를 수행할 수 있는 다른 방법을 사용해서 구현하자. 아래 링크 참고 행렬 테두리 회전하기프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr단순 구..
from collections import dequedef solution(maps): answer = [] n = len(maps) m = len(maps[0]) dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] q = deque() visited = [[False] * m for _ in range(n)] foods_sum = 0 for i in range(n): for j in range(m): if not visited[i][j] and maps[i][j] != 'X': q.append((i, j)) visited[i]..
def 재귀함수(n): if 정답이면 : 출력 or 저장 else : 정답이 아니면 : for 모든 자식 노드에 대해서: if 정답에 유망하다면(답의 가능성이 있으면) : 자식노드로이동 재귀함수(n+1) 부모노드로 이동 혹은 유망 조건을 따로 함수로 빼줘서 구현한다. def 백트래킹(n): if 정답이면 : 출력 or 저장 else : for 모든 자식 노드에 대해 : if 유망한지확인(m) : 자식노드로 이동 백트래킹(n+1) 부모노드로 이동 def 유망한지확인(m): if 조건에 안맞으면 : return False return True # 1182번: 부분수열의 합 n, s = map(int, input().split()) arr = sorted(list(map(int, input().split())..
[python] 2차원 리스트 생성 및 입력 받기, 원하는 값 찾기, 탐색, 전치 행렬 '본 포스팅은 글쓴이 개인의 공부 목적이므로, 틀린 부분이 있다면 댓글로 달아주시면 감사하겠습니다.' 오늘은 2차원 리스트에 대해 알아보겠다. 1. 2차원 리스트의 구조 2차원 리스트는 1차원 minjoos.tistory.com arr = [list(map(int, input().split())) for _ in range(10)] 이렇게 하면 행이 10개고, 열의 개수는 줄바꿈이 될때까지 입력받을 수 있다. 하지만 줄마다, 즉, 행마다 입력하는 숫자의 개수가 다를 경우 오류가 발생할 수 있다. (사실 그럴 경우는 거의 없으니 이렇게 입력받아도 될 듯하다.)
# 2차원 리스트 시계 방향 90도 회전 def roate_a_matrix_by_90_degree(arr): n = len(arr) # 행 길이 m = len([arr[0]]) # 열 길이 result = [[0] * n for _ in range(m)] # 결과 리스트 for i in range(n): for j in range(m): result[j][n-1-i] = arr[i][j] return result 규칙이 존재한다. 1. 회전 후 배열의 X 인덱스 == 회전하기 전 배열의 Y 인덱스 2. 회전 후 배열의 Y 인덱스 == (배열 크기 - 1) - 회전하기 전 배열의 X 인덱스