목록Programmers (15)
소소한 개발이야기
📄 다리를 지나는 트럭 🔗 문제 풀러가기 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; }
📄 프린터 🔗 문제 풀러가기 Queue를 이용해 문제를 풀 수 있습니다. 문제는 다음과 같이 접근할 수 있습니다. 먼저 인쇄 대기목록의 index와 해당 인쇄물의 priority를 저장하는 PrintItem Class를 정의해줍니다. 🌱 PrintItem Class class PrintItem { int index; int priority; public PrintItem(int index, int priority) { this.index = index; this.priority = priority; } } 그리고 주어진 인쇄 대기목록을 모두 Queue에 넣습니다. 이 후 Queue의 가장 첫 번째 원소를 대기상태로 뺀 다음 Queue에 남은 인쇄 목록 중 대기상태의 priority값 보다 큰 원소들의 개..
📄 방문 길이 🔗 문제 풀러가기 단순 구현문제 입니다. 문제의 조건은 총 2가지로 주어져 있습니다. 첫 번째로, 주어진 좌표 평면 안에서만 움직여야 하고 두 번째로, 한 번 갔던 길은 카운팅 하지 않는다 입니다. 문제 풀이 접근 방식은 다음과 같이 할 수 있습니다. 먼저, 맵에서 캐릭터가 움직인 경로를 체크하는 4차원 배열을 생성합니다. 4차원이라 조금 헷갈릴 수도 있지만 동작 방식은 다음과 같이 설정할 수 있습니다. 예를 들어, 현재의 위치를 curX, curY라 하고 움직인 위치를 dx, dy라 한다면 캐릭터가 움직인 경로는 [curx][curY][dx][dy] 입니다. 만약 움직이는 경로가 처음 가는 길이라면 카운팅을 해주면 됩니다. 여기서 주의해야 할 점은 캐릭터가 움직인 경로를 체크할 때 양 방..
📄 스킬트리 🔗 문제 풀러가기 문제에서 주어진 조건은 생각보다 단순합니다. 먼저 모든 문자열은 알파벳 대문자로만 이루어져 있습니다. 그리고 스킬의 총 길이는 최대 26이며 중복 또한 없습니다. 완전 탐색으로 진행해도 쉽게 문제를 해결할 수 있는 유형입니다. 문제 풀이 접근 방식은 다음과 같이 할 수 있습니다. 스킬트리 안에 스킬 순서에 포함되는 스킬이 있을 시 선행 스킬을 배웠는지 확인합니다. 여기서 문제를 조금 단순화 시킬 수 있는데 현재 스킬을 배우기 위해 이전의 모든 선행 스킬을 다 확인 할 필요가 없습니다. 바로 이전의 선행 스킬만 확인하면 됩니다. 만약 이전의 선행 스킬을 배우지 않았다면 이미 이루어 질 수 없는 조합이기 때문입니다. 여기서 주의해야 할 점은 스킬의 index가 0번째라면 out..