알고리즘 384

[프로그래머스] 게임 맵 최단거리

from collections import deque # bfs와 delta 를 사용해서 풀기 # 나의 위치는 1,1 라고 하지만 배열상 (0,0) # 상대방은 해당 배열의 가장 마지막인 (n-1, m-1) def solution(maps): que, mx_X_ln, mx_Y_ln = deque([[0, 0, 1]]), len(maps[0])-1, len(maps)-1 # y,x,cnt visit = [[0]*(mx_X_ln+1) for _ in range(mx_Y_ln+1)] while que: y, x, cnt = que.popleft() if visit[y][x]: continue visit[y][x] = 1 if x == mx_X_ln and y == mx_Y_ln: return cnt for s..

알고리즘 2023.06.29

[프로그래머스] 타겟 넘버 | 깊이/너비 우선 탐색(DFS/BFS)

# dfs 방식으로 푼 코드 # bfs로 풀어보니 시간이 더 오래 걸렸다. def solution(numbers, target): answer = 0 stack = [[0,0]] # 시작 stack while stack: idx, hap = stack.pop() if idx < len(numbers): stack.append([idx+1, hap+numbers[idx]]) stack.append([idx+1, hap-numbers[idx]]) else: if hap == target: answer += 1 return answer # bfs 방식으로 푼 코드 def solution(numbers, target): answer = 0 que = deque([[0,0]]) # 시작 queue while qu..

알고리즘 2023.06.28

[백준] DFS와 BFS (1260)

# dfs는 stack, bfs는 queue 의 특징을 이용해서 푼 코드 # visit를 이용해서 방문 체크로 방문하지 않은 node의 경우에만 추가하는 형식으로 시간 줄임. import sys from collections import deque n, m, v = map(int,sys.stdin.readline().split()) _dict = {i:[] for i in range(n+1)} for i in range(m): s,e = map(int,sys.stdin.readline().split()) _dict[s].append(e) _dict[e].append(s) stack, s_dfs, que, q_bfs = [v], [], deque([v]), [] # dfs = stack, s_dfs, bf..

알고리즘 2023.06.28

[프로그래머스] 튜플

# 코드 1 # 정규식을 사용해서 {} 사이의 문자를 찾은 다음 # 해당 길이가 짧은 것을 기준으로 정렬을 오름차순 정렬 # 이후 배열의 요소들을 정수화 시킨 다음 차집합을 이용하기 위해 set화 시킨 다음 # 차집합으로 이전 요소와 비교 후 달라진 값만 배열에 추가 후 리턴 시킴. import re def solution(s): answer = [] li = re.findall(r'\{.*?\}', s[1:-1]) li.sort(key=len) li = [set(map(int,i.strip('{}').split(','))) for i in li] if len(li) == 1: answer = list(li[0]) else: for i in range(len(li)-1): if i == 0: answer..

알고리즘 2023.06.26