STUDY 526

[프로그래머스] LEVEL3 단어 변환, python3, 깊이/너비 우선 탐색(DFS/BFS)

def solution(begin, target, words): if not target in words: return 0 answer = 0 queue = [begin] while words!=[]: answer+=1 tmp=[] while queue: word_stack=queue.pop(0) for word in words: change=0 for i in range(len(word)): if word[i]==word_stack[i]: change+=1 if change==len(word)-1: tmp.append(word) words= list([word for word in words if word not in tmp]) #print("after:",tmp,words) if tmp==[] and..

STUDY/Algorithm 2020.01.17

[프로그래머스] LEVEL3 네트워크, python3, 깊이/너비 우선 탐색(DFS/BFS)

DFS와 BFS의 개념은 알지만 직접 짜본적은 없기때문에 타인의 코드를 참고했다. 하지만 문제에 대해서는 어느정도 이해했는지는 중요하기 때문에 어떤 순서로 구현할 지를 먼저 생각해봤다. 1. n개 노드를 DPS로 확인 (들렀던 노드는 기억) 2. 더이상 갈만한 곳이 없는데 노드가 남아있는경우 answer(초기값=1)에 +1을 더함 def solution(n, computers): answer = 0 visit = [0]*n i=0 while 0 in visit: if visit[i]==0: dfs(computers,visit,i) answer+=1 return answer def dfs(computers, visit, start_node): stack = [] stack.append(start_node)..

STUDY/Algorithm 2020.01.16

[프로그래머스] LEVEL3 자물쇠와 열쇠, python3, 2020 KAKAO BLIND RECRUITMENT

처음에 생각했던 알고리즘은 lock의 홈부분이 key의 부분집합인지 확인하는 것이었다. 하지만 부분집합이어도 성립하지 않는것들을 찾았기 때문에 더이상 진전이 없었다. 물론 처음부터 끝까지 key을 돌려가며 모든 경우를 확인하는 완전탐색의 방법도 생각했으나 그것보다 더 좋은 생각이 없을까 하는 생각에 구현하지는 않았다. 하지만 다른사람의 알고리즘을 보니 대부분 모든 배열을 확인하는 방식으로 하였다. 뛰어난 알고리즘도 좋지만 코딩테스트에는 답을 구현하는게 더 중요한듯하다. 첫번째로 수행한것은 key를 회전시키는 함수의 구현이었다. def rot(key,M): #1 key[i][j]=key[j][i] tmp=[] for i in range(M): tmp_row=[] for j in range(M): tmp_r..

STUDY/Algorithm 2020.01.15

[프로그래머스] LEVEL3 추석 트래픽, python3, 2018 KAKAO BLIND RECRUITMENT[1차]

def solution(lines): answer,len_lines,count = 0, 0 ,1 start,finish=[],[] for log in lines: len_lines+=1 #print("완료시간:",log[11:23],"처리시간:",log[23:-1],"s") tmp=float(log[11:13])*3600+float(log[14:16])*60+float(log[17:23]) finish.append(tmp) start.append(round(tmp-float(log[24:-1])+0.001,3)) # print("start:",start,"\nfinish:",finish) for i in range(len_lines): # 종료시간으로 오름차순 정렬이므로, 종료시간만 비교 # 한 로그의 ..

STUDY/Algorithm 2020.01.09

[프로그래머스] LEVEL3 서머코딩/윈터코딩(2019) 종이접기, python3

def solution(n): answer = [] for i in range(n): if answer!=[]: tmp=[] tmp_rvs=[] for j in answer[-1]: tmp.append(j) if j==1: tmp_rvs.append(0) elif j==0: tmp_rvs.append(1) tmp.append(0) tmp_rvs.reverse() for j in tmp_rvs: tmp.append(j) answer.append(tmp) else: answer.append([0]) return answer[-1] 이 규칙은 쉽게 생각했다. N+1번째 배열은 가운데 0을 기준으로(추가해주고) 왼쪽은 N번째 배열 오른쪽은 N번째 배열의 순서와 접은 방향을 반대로한 배열을 배치해주면 되었다. 이..

STUDY/Algorithm 2020.01.08