Algorithm

Algorithm/problem solving

Today's Algorithm(2018-10-26)

programmers 다리를 지나는 트럭 어제 세탁이 끝나기를 기다리며 읽어봤던 문제인데요. 처음엔 쉽다고 생각했습니다. 그 때는 고려해야할 변수들이 많이 안 보였거든요. 근데 막상 구현을 하려니 생각보다 변수들이 많더라구요. 현재 다리 무게, 대기 트럭, 다리 위의 트럭, 경과 시간 그래서 문제를 풀다가 이것저것 추가하다보니 되게 지저분해진 것 같아요. 다른 사람들은 어떻게 풀었는지 궁금하네요. 우선 제가 풀었던 방식을 코드로 살펴볼께요. import java.util.LinkedList; import java.util.Queue; class Solution { public int solution(int bridge_length, int weight, int[] truck_weights) { Queue..

Algorithm/problem solving

Today's Algorithm(2018-10-25)

Today's Algorithm(2018-10-25) programmers 기능개발 최근에 이 문제를 시도하였다가 실패했던 적이 있었습니다. 그 때 저의 가장 큰 실수는 문제를 잘못 이해했던 것이었고 그 때문에 시간은 시간대로 날리고 문제도 해결하지 못했던 기억이 있습니다. 그래서 알고리즘 문제풀이에서 가장 기본 중의 기본인 문제를 다시 꼼꼼하게 읽고 시작하였습니다. 이 문제에서 가장 핵심은 제일 앞부분부터 완료되어야 한다는 것입니다. 앞부분부터 나가야 뒤에도 나갈 수 있는 터널과 같은 구조인 것입니다. 그래서 Queue를 써야겠다는 생각이 들었습니다. 그리고 테스트코드를 통해 하나하나씩 접근하였습니다. 제가 먼저 궁금했던 것은 큐가 반복되는 환경에서 큐의 개수를 줄여나갈 수 있는지였습었습니다. 왜냐하면..

Algorithm/problem solving

Today's Algorithm(2018-10-22)

Today's Algorithm(2018-10-22) programmers 탑 수업시간에 다뤘던 문제인데.. 제가 문제를 풀고 있었던지 그 풀이가 기억이 안나네요. 그래서 아쉽지만 제가 풀었던 방법만 기록할 수 있을 것 같네요. 이 문제를 단순하게 정리하면 각 탑의 꼭대기에서 왼쪽 방향으로 전파를 보낼 때 걸리는 탑이 있으면 걸렸던 탑의 인덱스, 없으면 0을 배열에 넣으면 됩니다. 문제가 스택/큐 카테고리에 있는 만큼 최대한 스택/큐를 이용해보려 노력해봤는데요. 그래서 설계를 다음과 같이 하였습니다. 왼쪽에서 하나씩 탐색 기준을 두면서 하나씩 기준을 증가시킨다. 탐색 기준 이전까지 값들을 스택에 모두 넣어둔다. 스택의 사이즈를 하나씩 줄이면서 탐색 기준 값보다 큰 값을 만나면 그 값의 인덱스(스택크기 +..

Algorithm/problem solving

Today's Algorithm(2018-10-20)

Today's Algorithm(2018-10-20) programmers 전화번호 목록 알고리즘 수업시간에 다룬 내용입니다. 이 문제는 크게 3가지 방법(정렬, 해시, 트라이)으로 풀 수 있는데요. 트라이를 제외한 정렬, 해시로 구현한 방법을 살펴보겠습니다. 소스코드에 앞서 알고리즘 문제를 풀 때는 문제가 요구하는 바를 정확히 파악하고 문제를 단순하게 하는 작업이 필요한 것 같습니다. 이 문제의 경우 문제 상황 자체는 복잡하지만 결국 요구하는 것은 '특정 문자열이 다른 문자열의 substring으로 들어있는 것이 있나' 입니다. 이렇게 단순화하면 방향이 좀 더 명확하게 보일 수 있습니다. 정렬 class Solution { public boolean solution(String[] phone_book)..

Algorithm/concepts

순열(permutation)

순열(permutation) 어제 알고리즘 수업시간에 순열을 만드는 법을 배웠습니다. 평소 문제를 풀다가 여러 경우의 수를 고려하기 위해 순열 또는 조합이 필요한 경우를 느껴왔기 때문에 수업이 기대되었는데요. 물론 처음부터 순열 소스코드가 바로 이해되지는 않았지만 끝나고 혼자 고민하는 시간을 통해서 어떻게 구성되는지 대략적인 구조를 파악할 수 있었습니다. 오늘 배운 순열 구현 방법은 swap함수와 재귀를 이용하는 방법인데요. 우선 소스코드부터 보도록 하겠습니다. void myswap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } void permutation(int[] arr, int d, int n, int..

Algorithm/problem solving

Today's Algorithm(2018-10-16)

programmers 프린터 오늘도 스택 카테고리에 있는 문제를 풀었습니다. 프린터 문제인데요. 이 문제를 풀면서 어려웠던 점이나 고민되었던 점을 간략하게 정리하겠습니다. (처음 위치, 바뀐 위치, 우선순위) 이렇게 3가지 정보를 어떻게 자료구조에 담을 것인가? 이 부분이 이 문제에서 가장 고민되었던 부분입니다. 기본적으로 프린터의 구조상 Queue형태로 문제를 풀어나가야 한다는 것은 알겠지만 여기에 어떤 자료형을 담을지, 그리고 answer로 제출할 답들은 어디에 넣을지가 고민되었습니다. 결국 Job이라는 내부 클래스를 만들어 자료형으로 만들어야 겠다는 생각이 들었습니다. 전에 C++할때는 Pair라는 자료구조가 있어서 동시에 2개 정보를 담을 수 있었지만 자바에선 이런게 없었기 때문입니다. class..

Brad Lee
'Algorithm' 카테고리의 글 목록 (13 Page)