목록소소한개발 (56)
소소한 개발이야기
📄 전화번호 목록 🔗 문제 풀러가기 문제는 String 배열만을 사용해서 해결하였습니다. 먼저 이번 풀이는 제가 처음 접근했던 방법들과 접근하던 도중 발생했던 오류(런타임 에러) 에 대한 개인적인 생각과 해결과정을 함께 포함시켜 풀이를 해보겠습니다. 최종 소스코드만 보고싶으신 분들은 최종 소스코드만 보기를 클릭하셔도 됩니다. 글의 순서는 다음과 같습니다. 첫 번째 접근 방식과 에러 두 번째 접근 방식과 에러 런타임 에러가 발생하는 이유(개인적인 생각) 런타임 에러를 해결한 방법(최종 소스코드) 첫 번째 접근 방식 첫 번째로 접근했던 방법은 HashMap을 이용해서 문제를 접근하였습니다. 모든 전화 번호 목록을 Map에 입력 후 검사 대상인 전화번호를 제외하고 Map의 모든 값들을 확인하였습니다. 확인하는..
📄 대회 or 인턴 [백준 2875번] 🔗 [전체 소스 코드] 🔗 [문제 풀러가기] 그리디 알고리즘 분류에 있는 문제입니다. 문제의 입력은 대회에 참가하는 인원인 여학생 M명과 남학생 N명이 주어지고 인턴에 참여해야 하는 인원 K명이 주어집니다. 인턴쉽에 K명은 반드시 참가해야 하기 때문에 대회에 참여하는 인원은 인턴쉽에 참가해야하는 인원을 뺀 나머지가 참가할 수 있습니다. 문제의 조건을 나열해보면 다음과 같습니다. 대회는 팀으로 참가 가능 하며 여자 2명, 남자 1명으로 구성되어야 한다. 대회에 참가하려는 인원중 K명은 반드시 인턴쉽에 참가하여야 한다. 인턴쉽에 참가하는 인원은 대회를 참여할 수 없다. 대회에 참가할 수 있는 최대 팀의 개수를 구한다 문제 풀이는 다음과 같이 할 수 있습니다. 먼저 인턴..
📄 더 맵게 🔗 문제 풀러가기 문제의 접근은 Min-Heap을 이용해 해결할 수 있습니다. 문제의 조건을 보면 주어진 원소들 중 가장 작은 값 과 두 번째로 작은 값 을 연산하여 새로운 값을 생성 합니다. 여기서 새로운 값이 항상 작다는 보장이 없습니다. 따라서 새로운 값을 생성한 뒤 다시 오름차순으로 정렬을 해야합니다. Min-Heap을 이용하면 가장 작은 작은 값이 항상 맨 앞에 있으므로 문제를 푸는데 쉽게 접근할 수 있습니다. 문제의 풀이 순서는 다음과 같습니다. Java에서 문제의 풀이는 PriorityQueue를 사용하였습니다. 주어진 모든 원소(scoville)를 우선선위 큐에 넣는다 첫 번째 원소의 값이 K값 이상인지 확인한다. K값 이하일 경우 첫 번째 원소와 두 번째 원소를 꺼내 새로운 ..
📄 쇠막대기 🔗 문제 풀러가기 스택을 이용해서 문제를 해결 할 수 있습니다. 처음 문제를 접했을 때 쇠막대기가 끝나는 시점에서 해당 쇠막대기가 포함하고 있는 레이저만큼 조각을 생성하는 방법을 생각하였습니다. 하지만 이렇게 접근하다 보니 겹쳐 있는 쇠막대기에 대해 처리해야 할게 너무나 많아져 간단하게 처리 할 방법을 생각하였습니다. 문제의 풀이 방식은 아래와 같습니다. 먼저 레이저가 나오면 무조건 지금까지 쌓인 쇠막대기 만큼의 조각이 생깁니다. 따라서 레이저가 나오면 스택에 있는 쇠막대기의 개수 만큼 조각을 추가 해줍니다. 문제의 예시에서 첫 번째 레이저를 만났을 때를 가정해본다면 다음과 같습니다. "(((()" 이렇게 첫 번째 레이저를 만나게 된다면 총 3개의 조각이 무조건 생기게 됩니다. 그 다음 레이..
📄 기능개발 🔗 문제 풀러가기 문제의 조건을 살펴보면 모든 작업은 동시에 개발 됩니다. 하지만 이전의 작업이 마무리 되지 않으면 현재 작업은 이전의 작업이 마칠때 까지 기다려야 합니다. 즉, 모든 작업은 순서대로 이루어 진다고 볼 수 있습니다. 따라서 모든 작업을 Queue에 넣고 Queue의 가장 첫 번째 작업이 끝났다면 Queue에서 제거 한 뒤 다음 작업들 중 동시에 끝낼 수 있는 작업도 같이 Queue에서 제거해주면 됩니다. 문제 풀이 접근 순서는 다음과 같습니다. 작업의 정보(현재 진행률, 진행속도)를 Queue에 넣는다. Queue가 비기 전까지(모든 작업이 끝날 때까지) 작업들을 진행 시킨다. 만약 Queue의 가장 첫 번째 작업(선행작업)이 종료 되었다면 Queue에서 제거한다. 선행작업 ..
📄 다리를 지나는 트럭 🔗 문제 풀러가기 Queue를 이용하여 문제를 해결하였습니다. 문제의 조건은 다음과 같습니다. 트럭은 일차선 다리를 정해진 순으로 건넌다. 트럭은 1초에 1만큼씩 이동한다. 다리가 견딜 수 있는 무게가 정해져 있다. 트럭이 다리에 완전히 오르지 않은 경우, 트럭의 무게는 고려하지 않는다. 먼저 정해진 순서대로 다리를 건너기 때문에 주어진 트럭들을 Queue에 넣습니다. 이때 각 트럭에 대한 상태(무게 및 이동 거리)를 관리하기 위하여 Truck이라는 클래스를 생성합니다. 그리고 현재 다리 위에 올라와 있는 트럭들을 관리하기 위하여 List을 생성합니다. 모든 트럭이 다리를 건너는 시간을 구하는 절차는 다음과 같습니다. 대기중인 트럭들과 다리 위에 올라와 있는 트럭이 비어 있다면 모..
📄 소수 찾기 🔗 문제 풀러가기 문제를 접근하는 방법은 2 가지가 존재 합니다. (더 많을 수도..) 첫 번째로, 숫자 조각으로 만들 수 있는 모든 숫자를 만들고 그 숫자들 중 소수의 개수를 세는 방법. 두 번째로, 숫자 조각으로 구할 수 있는 최대 수 까지 소수를 모두 구한 뒤 모든 소수를 검사하며 해당 소수가 숫자 조각들로 이루어 질 수 있는지 확인하는 방법 이 풀이에서는 두 번째 방법을 사용하여 문제를 해결하였습니다. 문제 풀이의 접근은 다음과 같습니다. 숫자 조각들로 구할 수 있는 가장 큰 값을 구한다. 가장 큰 값까지 소수를 구한다. (에라토스테네스의 체 이용) 구해진 소수들 중 숫자 조각들로 만들 수 있는지 확인한다. 여기서 소수를 구하는 방법은 크게 문제가 되지 않습니다. 하지만 구해진 소수..
💡 [BOJ #11945번 JAVA] (뜨거운 붕어빵) 문제 풀이 🔗 [소스 코드] 단순 swap 문제 입니다. 붕어빵 모양이 2차원 배열로 주어지는데 각 행을 역순으로 바꿔주기만 하면 되는 문제 입니다. 문자열 역순으로 출력 등의 문제와 같은 문제라고 볼 수 있습니다. 여기서 확인해야 할 점은 각 행을 역순으로 바꿀 때 모든 index를 확인하는 것이 아닌 열(col)의 1/2만 확인하며 역순으로 변경할 수 있다는 점 입니다. 🌱 붕어빵의 모양을 입력받는 함수 public static void inputShapeOfBoong(int[][] shapeOfBoong, int n, int m) throws IOException{ for (int i = 0; i < n; i++) { String inputMa..