본문 바로가기

분류 전체보기

(79)
내일배움캠프 4주차 돌아보기 알고리즘 과정이 생각보다 재미있다. 코딩 테스트를 준비할 때 하루에 몇개씩 풀어보고 했던 경험과 비교해보면 뭔가 구현과 이해에 더 집중하는 점이 좋다. 예전에는 문제를 푸는 기술을 공부하고 이해한다기 보다는 외우고 적응하는 느낌이었다면 지금은 개념을 먼저 배우고 그에 맞는 문제를 풀면서 확실히 다지는 느낌이다.단기 목표를 설정하고 하루하루 회고하는 것이 얼마나 도움이 되는지도 느꼈다. 원래 공부나 과제를 해도 목표를 잘 정하지 않고 진행하는 편이었다. 뭘 할지 정해놓고 또 얼마나 달성했는지까지 하루하루 확인하니까 상당히 동기부여가 되는 느낌. 정해놓은만큼 못하면 찝찝해서 쉬고싶어도 다시 얼른 일어나게 된다.아쉬운 부분이 있다면 코드카타를 리뷰하는 시간에 팀원들끼리 다른 문제를 풀기 때문에 적극적으로 피드..
[내일배움캠프 4-5일] 코드카타 문제, 스쿼드 문제, bfs 로또의 최고 순위와 최저 순위def solution(lottos, win_nums): # 맞은 당첨 숫자의 개수를 카운트 cnt = 0 # 0이 몇 개인지 카운트 zero_cnt = 0 for i in lottos: if i == 0: zero_cnt += 1 elif i in win_nums: cnt += 1 # 개수에 따른 순위 딕셔너리로 저장 dict = {6:1, 5:2, 4:3, 3:4, 2:5, 1:6, 0:6} answer = [] answer.extend([dict[cnt + zero_cnt], dict[cnt]]) # answer.extend([3, 5]) return a..
[내일배움캠프 4-4일] N-Queen, 백트래킹 N-QueenN*N 체스판이 있을 때 N개의 퀸끼리 서로 잡아먹지 못하게 배치하는 경우의 수를 구한다.모든 경우의 수를 탐색한다면 N이 늘어남에 따라 연산이 엄청나게 늘게 됨.여기서 백트래킹이 필요한 것.백트래킹필요없는 부분을 가지치기.예를 들어 첫번째 퀸을 (0,0)에 놨다면(그림 참고)두번째 퀸을 (1,0) 또는 (1,1)에는 배치 할 수 없음.이런 경우 세번째, 네번째 퀸이 어디로 배치되던 상관없이 실패 케이스이므로 가지를 쳐버리는 것.즉 이후 단계에 퀸 배치가 불가능하다면 하위 트리를 아예 배제한다.if is_ok_on(row): dfs(row + 1)def is_ok_on(nth_row): """ n번째(nth) 행에 퀸을 놓았을 때, 올바른 수인지 검사한다. nth 행의 ..
[내일배움캠프 4-3일] 스쿼드 과제, heapq, 인접 리스트, BFS 최소 힙우선 파이썬의 heapq 모듈을 먼저 공부했음.링크 : https://littlefoxdiary.tistory.com/3우선 최소 힙의 구조는 이러한 모습.부모 노드의 키값이 자식 노드보다 항상 작다. 즉 루트가 항상 가장 작은 값이 되는 구조. 파이썬에서는 heapq 알고리즘을 제공한다.heapq.heappush(heap, item) : item을 heap에 추가heapq.heappop(heap) : heap에서 가장 작은 원소를 pop 하고 리턴, 비어있다면 IndexError 호출heapq.heapify(arr) : 리스트 arr 를 즉각적으로 heap으로 변환이중 heappush와 heappop을 활용해서 문제를 해결하였음.import sysimport heapqinput = sys.std..
[내일배움캠프 4-2일] DFS, BFS, 알고리즘 스쿼드 과제 DFSDFS(Depth First Search)는 깊이 우선 탐색.말 그대로 하나의 루트를 최대한 깊숙하게 들어가며 탐색하고 다시 돌아가 다른 루트로 탐색하는 방식.자식 노드들을 순서대로 탐색한다고 생각하면 된다.이러한 그래프가 있다고 했을 때 DFS를 두가지 방법으로 구현할 수 있다. 1. 재귀함수로 구현[1, 2, 5, 6, 7, 3, 4] 순서로 탐색, 왼쪽 먼저 가는 깊이 우선 탐색이라고 생각하면 된다.def dfs_recursive(node, visited): # 방문처리 visited.append(node) # 인접 노드 방문 for adj in graph[node]: if adj not in visited: dfs_recursive(adj..
[내일배움캠프 4-1일] 알고리즘 스쿼드 과제 단어공부def most_frequent_alphabet(word): word = word.upper() word_list = list(set(word)) cnt = [] for i in word_list: cnt.append(word.count(i)) # 리스트 컴프리헨션 # cnt = [word.count(char) for char in word_list] if cnt.count(max(cnt)) > 1: return '?' else: return word_list[cnt.index(max(cnt))]word = input()print(most_frequent_alphabet(word))전부 대문자로 변경word_list를..
내일배움캠프 3주차 돌아보기 새로운 팀원분들을 만나고 새로운 과정도 시작했다. 자료구조&알고리즘 파트인데 익숙하면서도 허점이 많았다는 걸 느끼고 있다. 강의를 들으면 원리 자체는 쉽게 이해할 수 있었다. 이미 알고 있는 개념도 꽤나 있었다. 하지만 직접 구현을 하면서 생각보다 시간이 많이 걸린다는 걸 깨닫게 되었다. 진도를 막 빼는 것 보다는 시간을 들여서 이해하고 구현하는 과정을 머릿속에 그릴 수 있도록 학습하는게 이번 과정의 목표가 되었다.코드카타 빼먹지 말고 열심히 하자. 솔루션을 여러 방법으로 접근하면서 만들고 천천히 비교하며 코드를 구성하는게 도움이 된다. 다른 사람은 어떻게 했나 참고하는 것도 좋은 공부가 되는듯.팀원분들과도 소통을 더 많이 하려고 노력하고 있다. 서로 도와주는 팀이 되었으면 좋겠고 서로 눈치보는 것 없이..
[내일배움캠프 19일차] 해시 함수, heap 해싱해시 테이블을 인덱싱하기 위해 해시 함수를 사용하는 것. 왼쪽으로부터 오른쪽 값을 만들어내는 가장 간단한 로직.h(x) = x mod m쉽게 말해 나눗셈 연산.h(x)가 생성된 결과, m은 테이블의 크기.m을 정하는 것이 중요, 2의 제곱수에 가깝지 않은 소수를 선택하는 것이 좋음.개별 체이닝키의 해시 값을 계산.해시 값을 이용해 배열의 인덱스를 구함.같은 인덱스가 있다면 연결 리스트로 연결.해시 테이블이라고 하면 거의 이 방식을 말함.오픈 어드레싱충돌 발생 시 탐사를 통해 빈 공간을 찾아나서는 방식.자신의 해시값과 일치하는 주소에 저장된다는 보장이 없음.윤아가 2번을 먼저 할당받는다면 서현은 해싱 값은 2 이지만 한칸 올라가 3에 저장됨.Magic methoddef __len__(self): ..