목록programmers (6)
소소한 개발이야기
📄 쇠막대기 🔗 문제 풀러가기 스택을 이용해서 문제를 해결 할 수 있습니다. 처음 문제를 접했을 때 쇠막대기가 끝나는 시점에서 해당 쇠막대기가 포함하고 있는 레이저만큼 조각을 생성하는 방법을 생각하였습니다. 하지만 이렇게 접근하다 보니 겹쳐 있는 쇠막대기에 대해 처리해야 할게 너무나 많아져 간단하게 처리 할 방법을 생각하였습니다. 문제의 풀이 방식은 아래와 같습니다. 먼저 레이저가 나오면 무조건 지금까지 쌓인 쇠막대기 만큼의 조각이 생깁니다. 따라서 레이저가 나오면 스택에 있는 쇠막대기의 개수 만큼 조각을 추가 해줍니다. 문제의 예시에서 첫 번째 레이저를 만났을 때를 가정해본다면 다음과 같습니다. "(((()" 이렇게 첫 번째 레이저를 만나게 된다면 총 3개의 조각이 무조건 생기게 됩니다. 그 다음 레이..
📄 기능개발 🔗 문제 풀러가기 문제의 조건을 살펴보면 모든 작업은 동시에 개발 됩니다. 하지만 이전의 작업이 마무리 되지 않으면 현재 작업은 이전의 작업이 마칠때 까지 기다려야 합니다. 즉, 모든 작업은 순서대로 이루어 진다고 볼 수 있습니다. 따라서 모든 작업을 Queue에 넣고 Queue의 가장 첫 번째 작업이 끝났다면 Queue에서 제거 한 뒤 다음 작업들 중 동시에 끝낼 수 있는 작업도 같이 Queue에서 제거해주면 됩니다. 문제 풀이 접근 순서는 다음과 같습니다. 작업의 정보(현재 진행률, 진행속도)를 Queue에 넣는다. Queue가 비기 전까지(모든 작업이 끝날 때까지) 작업들을 진행 시킨다. 만약 Queue의 가장 첫 번째 작업(선행작업)이 종료 되었다면 Queue에서 제거한다. 선행작업 ..
📄 다리를 지나는 트럭 🔗 문제 풀러가기 Queue를 이용하여 문제를 해결하였습니다. 문제의 조건은 다음과 같습니다. 트럭은 일차선 다리를 정해진 순으로 건넌다. 트럭은 1초에 1만큼씩 이동한다. 다리가 견딜 수 있는 무게가 정해져 있다. 트럭이 다리에 완전히 오르지 않은 경우, 트럭의 무게는 고려하지 않는다. 먼저 정해진 순서대로 다리를 건너기 때문에 주어진 트럭들을 Queue에 넣습니다. 이때 각 트럭에 대한 상태(무게 및 이동 거리)를 관리하기 위하여 Truck이라는 클래스를 생성합니다. 그리고 현재 다리 위에 올라와 있는 트럭들을 관리하기 위하여 List을 생성합니다. 모든 트럭이 다리를 건너는 시간을 구하는 절차는 다음과 같습니다. 대기중인 트럭들과 다리 위에 올라와 있는 트럭이 비어 있다면 모..
📄 소수 찾기 🔗 문제 풀러가기 문제를 접근하는 방법은 2 가지가 존재 합니다. (더 많을 수도..) 첫 번째로, 숫자 조각으로 만들 수 있는 모든 숫자를 만들고 그 숫자들 중 소수의 개수를 세는 방법. 두 번째로, 숫자 조각으로 구할 수 있는 최대 수 까지 소수를 모두 구한 뒤 모든 소수를 검사하며 해당 소수가 숫자 조각들로 이루어 질 수 있는지 확인하는 방법 이 풀이에서는 두 번째 방법을 사용하여 문제를 해결하였습니다. 문제 풀이의 접근은 다음과 같습니다. 숫자 조각들로 구할 수 있는 가장 큰 값을 구한다. 가장 큰 값까지 소수를 구한다. (에라토스테네스의 체 이용) 구해진 소수들 중 숫자 조각들로 만들 수 있는지 확인한다. 여기서 소수를 구하는 방법은 크게 문제가 되지 않습니다. 하지만 구해진 소수..
📄 탑 🔗 문제 풀러가기 2중 for문으로 쉽게 문제를 해결할 수 있습니다. 모든 탑은 왼쪽으로 레이저 신호를 발사하기 때문에 가장 오른쪽 탑부터 검사를 시작합니다. 현재 탑의 위치에서 왼쪽으로 이동하며 자신보다 높은 탑의 index 번호를 answer배열에 저장하면 문제를 해결할 수 있습니다. 🌱 Solution 함수 public int[] solution(int[] heights) { int len = heights.length; int[] answer = new int[len]; for (int i = len - 1; i > 0; i--) { for (int j = i - 1; j >= 0; j--) { if (heights[j] > heights[i]) { answer[i] = j + 1; bre..
📄 주식가격 🔗 문제 풀러가기 이중 for문을 이용하면 쉽게 문제를 해결할 수 있습니다. i번째 값을 기준으로 이 후 값이 내려가기 전까지 카운트 해주면서 몇 일 동안 가격이 유지되는지 세어주기만 하면 됩니다. 🌱 Solution 함수 public int[] solution(int[] prices) { int len = prices.length; int[] answer = new int[len]; int cnt = 0; for (int i = 0; i prices[j]) { break; } } answer[i] = cnt; } return answer; }