본문 바로가기

Algorithm

(140)
미로탈출 문제 1 - 가능한 위치, 0 - 괴물일 때, (0, 0)에서 (n, m)까지 이동하는데 가장 짧은 거리 유형 파악 그래프가 주어지고 특정 노드의 위치를 탐색하는 것이므로 우선, BFS/DFS 이다. 코드 dx = [-1, 0, 1, 0] dy = [0, -1, 0, 1] from collections import deque def bfs(array, visited, start): visited[start[0]][start[1]] = True queue = deque() queue.append(start) while queue: x, y = queue.popleft() for i in range(4): next_x = x + dx[i] next_y = y + dy[i] if next_x < 0 or ne..
음료수 얼려먹기 문제 구멍 : 0, 칸막이 : 1 구멍이 뚫려있는 부분끼리 상하좌우로 붙어있는 경우 서로 연결되어 아이스크림 생성 아이스크림의 수는? 유형 파악 우선 아이스크림을 만들려면 연결된 노드들을 파악하다가 더이상 연결된 노드들을 찾을 수 없을 때 아이스크림 하나가 생긴다. 따라서, 연결된 모든 노드들을 탐색할 수 있는 DFS/BFS를 사용할 수 있는데, 둘 다 사용이 가능하다. 코드 def dfs(array, visited, start): x = start[0] y = start[1] visited[x][y] = True dx = [-1, 0, 1, 0] dy = [0, -1, 0, 1] for i in range(4): next_x = x+dx[i] next_y = y+dy[i] if 0
DFS BFS - Concept 해당 문제는 "이것이 코딩 테스트이다" 책을 참고하여 제작하였습니다. 탐색 알고리즘 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 - DFS, BFS 자료구조 스택 - 후입선출 - list로 구현, append() , pop() - 재귀함수의 수행방식 큐 - 선입선출 - deque로 구현, append(), popleft() - deque는 list보다 데이터 삽입, 삭제가 빠름 오버플로 : 특정한 자료구조가 수용할 수 있는 데이터의 크기를 이미 가득 찬 상태에서 삽입연산을 수행할 때 발생 언더플로 : 데이터가 없는 자료구조에서 삭제 연산을 수행할 때 발생 (+)프로그래밍에서 그래프는 크게 2가지로 표현가능 - 인접 행렬 : 2차원 배열에서 각 노드와 나머지 모든 노드에 대해서 연결된 형태를 기록하..
문제 뱀의 움직임 - 몸길이를 늘려 머리를 다음칸에 위치시킨다. - 이동한 칸에 사과가 있다면 사과는 없어지고 꼬리는 움직이지 않는다. - 사과가 없다면, 몸길이를 줄여 꼬리가 위치한 칸을 비워준다, 즉 몸 길이는 변하지 않는다. 초기 조건 - 초기 길이는 1이다. - 처음에는 오른쪽을 향한다. 게임 끝나는 조건 - 뱀이 자신의 몸 또는 벽에 부딪히는 경우 해결 이 문제는 좀 뱀의 움직임을 이해를 하는데 하는데 노력해야 한다. 1. 뱀의 길이는 1cm이다. 2. 몸길이를 늘려 머리를 다음칸에 위치시킨다. -> 예를 들어, 뱀이 시작지점인 (0, 0)에 위치한다고 가정했을 때, 뱀의 머리와 꼬리 모두 (0, 0)에 위치한 것이다. -> 움직임이 들어가면 (0, 0)에 꼬리, (0, 1)에 머리가 위치한다...
문자열 재정렬 문제 알파벳 대문자와 숫자로만 이루어진 문자열에 대해서 모든 알파벳을 오름차순으로 정렬하고 이 후, 모든 숫자를 더한값을 뒤에 붙여라 "K1KA5CB7" -> ABCKK13 유형 요구하는 것을 그대로 구현하면 되는 문제이다. 따라서 구현문제로 볼 수 있다. 코드 input = "K1KA5CB7" input = "AJKDLSI412K4JSJ9D" str_list = [] num = 0 for i in range(len(input)): if input[i].isalpha(): str_list.append(input[i]) continue num += int(input[i]) str_list.sort() result = [] for i in range(len(str_list)): result.append(st..
럭키 스트레이트 문제 항상 짝수자릿수에 대해서 반으로 나눠서 왼쪽의 합과 오른쪽의 합이 같으면 "Lucky", 아니면 "Ready" 출력하라. 유형 요구한 것을 그대로 구현하면 되는 문제이다. 코드 def solution(input): result1 = 0 result2 = 0 mid_index = int(len(input)/2)-1 for i in range(len(input)): if i
게임 개발 유형 구현-시뮬레이션 코드 array = [ [1, 1, 1, 1, 1], [1, 0, 0, 0, 1], [1, 1, 0, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1] ] start_dir = 0 start_x = 1 start_y = 1 dx = [-1, 0, 1, 0] dy = [0, 1, 0, -1] count = 0 result = 1 while(1): array[start_x][start_y] = 1 left = start_dir-1 if left < 0: left = 3 pos_x = start_x + dx[left] pos_y = start_y + dy[left] if 0
왕실의 나이트 유형 일련의 명령에 따라서 개체를 차례대로 이동시킨다는 점에서 '구현-시뮬레이션' 알고리즘 코드 pos = "a1" column = int(ord(pos[0]) - int(ord('a'))) + 1 row = int(pos[1]) # Solution1 a = [-2, 2] b = [-1, 1] count = 0 for i in range(2): for j in range(2): x_pos = column + a[i] y_pos = row + b[j] if 1