Algorithm/problem solving

Algorithm/problem solving

Today's Algorithm(2018-10-29)

programmers 완주하지 못한 선수 문제 자체는 크게 어렵지 않았습니다. 하지만 효율성 테스트도 있기 때문에 출제자의 의도에 맞게 푸는게 관건일 것 같네요. 이를 고려하면 HashMap을 이용하여 풀 수 있는데요. 간략하게 정리해볼게요. HashMap에 주어진 참가자를 차례대로 넣는다. 그리고 동명이인의 경우 value값을 증가한다. HashMap에서 완주한 사람을 찾아 value값을 감소한다. 이 때 value값이 0이면 remove()하여 없앤다 HashMap 에 마지막에 남은 1명을 출력한다. 이 방법대로 풀면 다음과 같이 구현할 수 있습니다. class Solution { public String solution(String[] participant, String[] completion) {..

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/problem solving

Today's Algorithm(2018-10-16)

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

Brad Lee
'Algorithm/problem solving' 카테고리의 글 목록 (12 Page)