본문 바로가기

코딩테스트70

[이것이 코딩테스트다] Q7. 럭키 스트레이트 구현 : 알고리즘을 정확하고 빠르게 프로그램으로 작성하는 과정을 구현이라고 함. 완전 탐색과 시뮬레이션 : 구현 능력이 요구되는 대표적인 알고리즘 문제 유형으로 완전 탐색과 시뮬레이션이 있다. 완전 탐색 : 모든 경우의 수를 빠짐없이 다 계산하는 해결 방법 / 모든 경우의 수를 다 계산 -> 재귀 함수(DFS/BFS) 시뮬레이션 : 문제에서 제시하는 논리나 동작 과정을 그대로 코드로 옮겨야 하는 유형을 의미 원소를 나열하는 모든 경우의 수를 고려해야 상황에서 보통 순열이나 조합 라이브러리를 사용해야 함. Q7. 럭키 스트레이트 게임의 아웃복서 캐릭터는 필사기인 '럭키 스트레이트' 기술이 있다. 매우 강력한 기술인 대신에, 특정 조건을 만족할 때만 사용할 수 있다. 특정 조건 현재 캐릭터의 점수를 N이라고.. 2024. 3. 26.
[이것이 코딩테스트다] Chapter 05 DFS/BFS - 미로 탈출 N, M 직사각형 형태의 미로에 갇혀 있다. 미로에는 여러 마리의 괴물이 있어 이를 피해 탈출해야한다. 동빈이의 위치는 (1,1)이고 미로의 출구는 (N,M) 의 위치하며 한 번에 한 칸씩 이동할 수 있따. 괴물이 있는 부분은 0, 괴물이 없는 부분은 1로 표시되어 있따. 동빈이가 탈출하기 위한 최소 칸의 개수를 구하시오. 칸을 셀 때는 시작칸과 마지막 칸을 모두 포함해서 계산한다. Sol) BFS를 이용했을 때 매우 효과적으로 해결할 수 있다. BFS는 시작 시점에서 가까운 노드부터 차례대로 그래프의 모든 노드를 탐색하기 때문이다. 그러므로 (1,1) 지점에 서부터 BFS를 수행하여 모든 노드의 값을 거리 정보로 넣으면 된다. 특정한 노드를 방문하면 그 이전 노드의 거리에 1을 더한 값을 리스트에 넣는.. 2024. 3. 23.
[이것이 코딩테스트다] Chapter 05 DFS/BFS - 음료수 얼려 먹기 N*M 크기의 얼음 틀이 있다. 구멍이 뚫려 있는 부분은 0, 칸막이가 존재하는 부분은 1로 표시된다. 구멍이 뚫려 있는 부분끼리 상, 하, 좌, 우로 붙어 있는 경우 서로 연결되어 있는 것으로 간주한다. 이때 얼음 틀의 모양이 주어졌을 때 생성되는 총 아이스크림의 개수를 구하는 프로그램 Sol) 이 문제는 DFS로 풀 수 있다. 0인 값이 상,화,좌,우로 연결되어 있는 노드를 묶으면 오른쪽과 같이 세 묶음이 나올 것. 이러한 묶음을 찾아주는 프로그램을 어떻게 작성할 수 있는가? DFS 를 이용하자면, 1. 특정한 지점의 주변 상, 하, 좌, 우를 살펴본 뒤에 주변 지점 중에서 값이 '0' 이면서 아직 방문하지 않은 지점이 있다면 해당 지점을 방문한다. 2. 방문한 지점에서 다시 상, 하, 좌, 우를 살.. 2024. 3. 23.
[프로그래머스] DFS/BFS - 게임 맵 최단거리 아직 BFS가 낯설어서! 다른 분 코드 참고 from collections import deque def solution(maps): # 방향 설정 : 앞,아래,뒤,위 dx = [-1,0,1,0] dy = [0,1,0,-1] result = 0 n = len(maps) # 행 개수 m = len(maps[0]) # 각 열마다 몇 개 있는 지, ck = [[0]*m for _ in range(n)] # n*m 2차원 배열 생성 dis = [[0]*m for _ in range(n)] # n*m 2차원 배열 생성 queue = deque() # 큐 생성 ck[0][0] = 1 #방문처리 dis[0][0] = 1 #방문처리 queue.append((0,0)) #큐에 삽입 while queue: now = qu.. 2024. 3. 22.
[이것이 코딩테스트다] Chapter 02. DFS/BFS 이어서 인접 행렬 방식 : 모든 관계를 저장하므로 노드 개수가 많을 수록 메모리가 불필요하게 낭비 인접 리스트 방식 : 연결된 정보만을 저장하기 때문에 메모리를 효율적으로 사용 인접 리스트 방식은 인접 행렬 방식에 비해 정보를 얻는 속도가 느림 But. 인접 리스트 방식은 인접 행렬 방식에 비해 메모리 공간의 낭비가 적다. DFS는 스택 자료구조를 이용하며 구체적인 동작 과정은 다음과 같다. 1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다. 3. 2번의 과정을 수행할 수 없을 때까지 반복한다. 깊이 우선 탐색 알고리즘인 DFS는 .. 2024. 3. 21.
[이것이 코딩테스트다] Chpter 05 DFS/BFS 탐색 - 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정 자료구조 - 데이터를 표현하고 관리하고 처리하기 위한 구조 삽입 : 데이터를 삽입한다 삭제 : 데이터를 삭제한다. 스택 - First IN Last Out 나중에 들어온 것이 먼저 빠짐. 샌드위치 구조 stack = [] stack.append(4) stack.pop() 큐 - First In First Out ex. 놀이공원 처음에 들어온 사람이 먼저 나감 queue = deque() queue.append(5) queue.popleft() print(queue) -> 먼저 들어온 순서대로 출력 queue.reverse() -> 역순으로 바꾸기 재귀 함수 자기 자신을 다시 호출하는 함수 DFS 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 .. 2024. 3. 20.