방금 막 DFS/BFS 네트워크 포스팅을 했는데 알고리즘 하나 더 포스팅하려 합니다 ㅎㅎ (다른 주제로 포스팅하고 싶은데 노트북을 수리 맡긴 상황이라 알고리즘밖에 할 게 없네요 ㅜ) 바로 시작합니다. 이번에 풀어볼 문제는 역시 코딩 테스트 고득점 Kit에 들어있는 탐욕법 - 섬 연결하기입니다. programmers.co.kr/learn/courses/30/lessons/42861 코딩테스트 연습 - 섬 연결하기 4 [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] 4 programmers.co.kr 접근 방식: 1. 저는 가장 최소의 비용으로 섬을 연결해야 하기 때문에 가장 적은 비용이 드는 섬을 먼저 탐색하는 것이 좋을 것 같다고(?) 생각했습니다. 그래서 입력값인 costs를..
오늘 풀어볼 문제는 코딩 테스트 고득점 Kit에 들어있는 DFS/BFS - 네트워크입니다. 개인적으로는 이 문제는 여행경로와는 다르게 레벨 3치고는 엄청 쉬운 편(?) 인 것 같습니다. programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있 programmers.co.kr 접근 방식: 1. 주어진 2차원 배열을 갖고 그래프를 만듭니다. 2. 탐색을 해야 하므로 BFS함수를 작성합니다. 모든 탐색이 끝난 후 그래프에서 방문한 노드를 삭제해 줍니다. 한 번의 ..
뭐 정말 별거 없지만.. leetcode 사용기? 사용방법? 에 대해 포스팅 해보려 합니다. 우리나라에서 유명한 알고리즘 문제풀이 사이트로는 백준, 프로그래머스 등이 있을 텐데요. 외국에서는 leetcode가? 유명한것 같습니다. 구글, 페이스북, 아마존 등.. 유수의 IT기업 코딩테스트를 준비하기 위해서 leetcode를 통해 공부하는 것 같네요. 그래서 만약 다양한 문제를 풀어보시고 싶으시거나 해외취업을 생각하시는 분들은 leetcode에 있는 문제를 많이 풀어보시는면 좋을 것 같습니다! 우선 leetcode.com에 들어가셔 회원가입을 하셔야 하는데요. 회원가입 절차라고 할 것도 따로 없네요;; 그냥 구글로 회원가입 하면 특별히 양식같은거 기입 안해도 됩니다 ㅎㅎ; 이제 로그인 후, 최상단에 Pro..
오늘은 프로그래머스의 코딩 테스트 고득점 Kit에 들어있는 DFS/BFS문제를 풀어보려 합니다. DFS/BFS는 코딩테스트에 자주 나오는 유형이니 4문제 다 풀어보면 좋을 것 같네요 오늘 풀어볼 문제는 여행경로입니다. programmers.co.kr/learn/courses/30/lessons/43164 처음 문제를 읽고 레벨3치고는 쉽네? 생각했는데, 테스트 케이스 1번 때문에 생각보다 애를 먹었네요. 그래서 아예 풀이를 갈아엎고 다시 풀었다는.. ㅜㅜ 저의 접근 방식은 이렇습니다. 1. 주어진 배열을 그래프로 만든다. (그래프 만드는 방법은 다양한 방법이 있겠지만, 저는 딕셔너리를 사용해서 인접 리스트 형식으로 만들었습니다.) 2. 큐를 만들고 (출발 노드, [경로]) 넣어준다. (처음엔 출발점이 무..
오늘은 기초적인 정렬 알고리즘을 알아보려 합니다. 대표적인 정렬 알고리즘으로는 선택 정렬, 버블 정렬(거품 정렬), 삽입 정렬, 셸 정렬(쉘 정렬), 병합 정렬, 퀵 정렬 등이 있는데요. 간단하게 선택 정렬, 버블 정렬, 삽입 정렬, 쉘 정렬 네 가지 정렬의 정의와 코드를 정리하고 각각의 알고리즘 실행 속도를 측정하여 성능을 비교해 보려 합니다. 1. 선택 정렬 주어진 배열에서 가장 작은 원소를 찾아 첫 번째 원소와 교환하고 두 번째 작은 원소를 찾아 두 번째 원소와 교환하고... 반복하는 정렬 방법 정렬 방법 1. 주어진 배열 중 최솟값을 찾는다. 2. 그 최솟값을 맨 앞의 원소와 교환한다. 3. (N-1)원소에 대해 1-2 방법 반복 소스코드(파이썬) def select_sort(a: list) ->..
보통 코딩 테스트를 볼 때, 조금 난이도가 있는 문제는 알고리즘의 정확성 테스트뿐만이 아니라 효율성 테스트를 함께 검토하게 됩니다. 즉 알고리즘을 잘 구현해서 정답을 잘 맞춰도 효율이 좋지 못하면.. 효율성 테스트를 통과하지 못하게 되는데요. 이럴 경우, 정확성 부분에만 부분점수를 받을수도, 아예 점수를 받지 못할 수도 있습니다. 이 효율성테스트라는 것이 시간 복잡도를 의미합니다. 결국 이 알고리즘이 얼마나 문제를 빨리 풀어낼 수 있는지 체크하는 것이라 할 수 있습니다. 저 같은경우, 딱 문제를 보고 직관적으로 생각나는 방법으로 풀면 무조건 시간 복잡도가 O(n^2)이 나오더라구여 ㅜㅜㅜ 보통 효율성 테스트를 통과하기 위해서는 시간복잡도가 O(nlogn)이 되어야 하는 것 같습니다. 알고리즘을 처음 공부..
오랜만에 글 작성 하는것 같네요 ㅎㅎ.. 사실 머신러닝도 그렇고, iOS도 그렇고 욕심은 많아서 포스팅 하고 싶은 글들이 많은데.. 어쩌다보니 계속 미루게 되었네요. 다시 열심히 작성해 봐야겠습니다! 알고리즘 카테고리의 첫 포스팅인데, 앞으로 이 알고리즘 카테고리에 제가 푼 알고리즘 문제들을 올릴 것 같습니다. (알고리즘 실력이 너무 형편없어서 그냥 기록용으로 올릴 것 같습니다 ㅎㅎ..) 오늘은 알고리즘이 무엇인지와 순서도, 그리고 알고리즘 공부하기 좋은 사이트를 소개해드리려 합니다. 알고리즘 - 특정 문제를 해결하기 위해 논리적으로 기술해 놓은 일련의 명령문 프로그램 - 알고리즘을 컴퓨터가 이해하고 실행할 수 있는 특정 프로그래밍 언어로 표현한 것 순서도 - 미리 정의된 기호와 그것들을 서로 연결하는 ..