본문 바로가기

알고리즘문제

(5)
[알고리즘] 프로그래머스 - 요격 시스템 이번에 푼 문제는 프로그래머스의 요격 시스템으로, 탐욕 알고리즘을 사용해서 진행했다. 그리디 알고리즘은 각 단계에서 항상 최선의 선택을 하여 최종적으로 최적해를 찾는 알고리즘이다. 그래서 정렬을 우선적으로 사용하여 문제 요소를 적절한 순서로 만들어, 직관적이고 효율적이게 그리디 알고리즘이 동작하게 해야한다. 그래서 그리디 알고리즘에서는 항상 sorting을 먼저 진행해준다. 문제 문제설명 입출력 설명에서 나와있듯이, y축으로 쭉 뻗어나가는 미사일 요격 시스템을 이용해서 x으로 진행되는 미사일을 요격하는데, 이때 미사일 요격 시스템을 최소한으로 사용하면서 모든 미사일을 다 없애야 해서 최솟값을 구하는 문제이다. 접근법 이 문제는 탐욕 알고리즘으로 접근하여 해결한다. 그 사유는 아래와 같다. 탐욕 알고리즘으..
[알고리즘] 프로그래머스 - 네트워크 DFS를 풀었다면, 당연히 BFS도 풀어주는게 알고리즘의 도리이다. 이번에 볼 내용은 프로그래머스의 네트워크이다. 문제를 먼저 보겠다. 문제 문제설명 2차원 배열로 주어진 computers에서 서로 연결된 네트워크의 개수를 구하는 것이다. 이때 제한사항 중에서 아래와 같은 사항을 알 수 있다. i번 컴퓨터와 j번 컴퓨터가 연결되어 있으면 computers[i][j]를 1로 표현한다는 것은, 모든 배열을 다 탐색할 필요가 없고, n^2 / 2 + n 만큼 탐색을 진행하면 된다. O(n^2)로 O(n^2/2)로 시간 복잡도를 줄일 수 있다. 노드 1개 자체만으로도 네트워크가 될 수 있다. 접근방법 BFS로 진행했다. 이때 1노드와 2노드가 연결되었다고 할 때 탐색을할 때 1노드에서만 진행하고 2노드는 따로 ..
[알고리즘] 프로그래머스 - 타겟넘버 이번주에 코딩테스트가 예정되어 있다. 그래서 예전의 감각을 되살리려고 DFS, BFS 문제를 연습중이다. 오늘 포스팅은 그중에서도 프로그래머스의 '코딩테스트 고득점 Kit' 중 DFS/BFS 색션에 있는 타겟넘버를 정리해 보았다. 참고로 주로 사용하는 언어가 Kotlin 이기에, 당연히 Kotlin으로 문제풀이를 진행했다. 문제 문제 설명 배열로 주어진 numbers에서 +,- 의 경우의 수를 모두 구해서 마지막 결과값이 target과 동일한 가짓수를 구하는 경우이다. 접근방법 DFS를 이용하여 해결했다. DFS를 이용한 사유는 아래와 같다. 주어지는 숫자 개수가 20개 이하여서 재귀로 돌려도 충분한 시간복잡도가 나온다. BFS로 해도 상관없지만, DFS를 더 좋아한다. 정답코드 class Solutio..
[알고리즘] BOJ 1969 - DNA 회사일이 바빴다. 근래들어 잠도 부쩍 많아져서 이것저것 못하는 것들이 많다. 그래서 어제 저녁에 이걸 못풀면 잠을 안잘것이다 했는데, 15분만에 해결해서 당황했다. 그래도 어찌됐든 저찌됐든 여튼저튼 해결한건 해결한거니 기록을 남겨두기 위하여 포스팅을 한다. 이건 무슨 문제인가 가만히 문제를 읽다보면, 과거의 어머니가 항상 하시던 말씀이 떠오른다. 책을 읽으라고 하면 항상 불평했는데, 지금은 그 모든게 나의 독해력 향상을 위한 큰 그림이란걸 세삼 서른이 다 되어 느끼게 된다. 사실 문제가 무슨 말 하는지를 모른다. 정말 2번, 3번 읽어봐도 모르겠다. 진지하게. 그래서 일단 구해야 하는것을 추려봤다. 구해야할 것 1. Hamming Distance의 합이 가장 작은 DNA 2. Hamming Distanc..
[알고리즘] 완전탐색 (Brute Force) 몇 년만에 코딩테스트 대비 알고리즘 문제해결을 위한 학습을 다시 시작했다. 비교적 간단한 개념인 완전탐색을 그 시작으로 가볍게 시작해보자 완전탐색 혹은 Brute Force 라고 불리는 이 기법은 그 자체 그대로 '완전하게 탐색을 한다' 의 의미를 갖고 있다. 좀 더 구체적으로 가보자면, 완전하게 탐색을 한다는 것은 문제가 주어지고 해당 문제에서 원하는 정답을 찾기위해서 모든 경우의 수를 다 찾아보는 것이다. 철수가 과일가게를 갔는데, 살 수 있는 과일은 2가지이고 과일가게에서 파는 과일은 사과, 배, 키위, 수박, 메론, 두리안 이렇게 6개이다. 그리고 철수는 1,000원을 갖고 있고, 각 과일의 가격은 순서대로 200, 250, 310, 680, 680, 200원 이다. 그렇다면 철수가 거스름돈을 최..