728x90

programmers 20

[Programmers] 아이템 줍기 JAVA

[Programmers] 아이템 줍기 - LV 3접근bfs풀이좌표 평면에 여러 개의 사각형이 주어지고 겹쳐진 사각형의 외부 테두리만 따라 이동하며 아이템을 주우러 갈 때 최단 경로를 구하는 문제이다. 간단하게 생각하자면 모든 사각형의 테두리만 2차원 배열에 매핑한 뒤 매핑된 경로만 bfs를 사용해 따라가면 된다. 문제는 좌표를 그대로 가져 쓰면 (4, 5) (4, 6)처럼 움푹 들어간 부분을 제대로 표시할 수 없다. 각 좌표마다 점을 찍어 매핑하기 때문에 (3, 5)와 (3, 6) 은 좌표상에서 붙어있는 것처럼 보이기 때문에 정확하게 구현을 하기 위해선 좌표를 두 배로 확장해주어야 한다. private static final int[] dx = {0, 0, 1, -1}; private sta..

[Programmers] 서버 증설 횟수 JAVA

[Programmers] 서버 증설 횟수 - LV 2 접근큐풀이2025 코드챌린지 2차 예선 문제로 게임 서버가 증설되는 횟수를 구하는 문제이다. 게임을 이용하는 사람이 m 명 늘어날 때마다 서버가 증설되고 k 시간 동안 유지된다. 각 시간대마다 게임을 이용하는 사람의 수가 주어지고 총 서버 증설 횟수를 구하는 문제인데 m 명 이상의 사람이 접속하는 경우 서버가 증설되어 m 명 미만의 경우 서버가 증설되지 않는 부분을 잘 체크하면 된다.  public int solution(int[] players, int m, int k) { int count = 0; Queue active = new LinkedList(); for (int i = 0; i 큐를 사용해 현재..

[Programmers] 택배 상자 꺼내기 JAVA

[Programmers] 택배 상자 꺼내기 - LV 1 접근계산?풀이코드챌린지 2차 예선 문제로 택배 상자를 요구하는 순서로 쌓아 위에서부터 상자를 뺄 때 총 몇 개의 상자를 빼야 하는지 구하는 문제이다. 상자는 지그재그로 쌓기 때문에 꺼내야 하는 상자의 꼭대기엔 몇 개의 상자가 존재하는지 알 수 없다. 단순하게 일일이 상자를 다 쌓아보고 풀어도 될 거 같지만 단순하게 위의 상자만 빼기 때문에 계산을 통해 구해질 거 같아 해 봤다. public int solution(int n, int w, int num) { int totalLevel = n / w; if (n % w > 0) totalLevel++; int targetLevel = num / w; ..

[Programmers] 지게차와 크레인 JAVA

[Programmers] 지게차와 크레인 - LV 2접근dfs풀이코드챌린지 1차 예선의 3번째 문제 지게차와 크레인 문제이다. 컨테이너가 배열로 주어지고 지게차와 크레인을 사용해 컨테이너를 꺼내고 난 뒤 남아있는 컨테이너의 개수를 반환하는 문제이다. 간단한데 헷갈리는 부분이 있어 헤맸던 문제이다. 크레인은 단순히 요청하는 컨테이너를 모두 제거하면 되기 때문에 간단한 작업이다. 문제는 지게차를 이용한 작업으로 지게차로 컨테이너를 제거하기 위해서는 컨테이너의 4면 중 한 면이 외부와 연결되어 있어야 한다. 단순히 컨테이너의 4면 중 한 면이 공백과 닿아있는 것이 아니라 그 공백이 외부와 닿아있어야 한다는 것이 중점이다.  또 다른 주의 사항인 지게차 작업에만 해당되는 내용으로 작업이 수행되는 request의..

[Programmers] 유연근무제 JAVA

[Programmers] 유연근무제 - LV 1접근구현풀이2025 프로그래머스 코드챌린지 문제가 업데이트되어 하나씩 풀어 볼 예정이다. 이번 문제는 1차 예선의 가장 쉬운 문제인 유연근무제이다. 주어지는 출근 시간을 기준으로 +10분까지 정시 출근으로 인정이 되고 일주일 동안 평일을 모두 정시 출근에 성공하는 경우 선물을 받게 된다. 선물을 받게 되는 직원의 수를 구해야 하는 문제로 간단한 문제이다.  public int solution(int[] schedules, int[][] timelogs, int startday) { int answer = 0; for (int i = 0; i schedule) { break; ..

[Programmers] 전력망을 둘로 나누기 JAVA

[Programmers] 전력망을 둘로 나누기 - LV 2접근완전 탐색풀이n 개의 송전탑이 트리 형태로 연결되어 있을 때 한 개의 연결을 끊어 나눠진 두 송전탑의 개수를 최대한 비슷하게 맞추는 문제이다. 두 송전탑의 개수의 차가 제일 작을 때 몇 개인지를 구해야 하므로 연결을 끊어 나눠진 두 트리에 있는 탑 개수를 세어 뺀 절댓값을 반환해야 한다.  트리를 표현하기 위한 방법이 배열을 사용한 방법과 List를 사용한 방법으로 풀었다. List로 푼 방법으로 설명을 하겠다. private static class Node { List connected; public Node() { this.connected = new ArrayList(); } ..

[Programmers] 베스트앨범 JAVA

[Programmers] 베스트앨범 - LV 3접근해시풀이해시 카테고리의 문제로 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트앨범을 만드는 문제이다. 노래 수록 기준으로 속한 노래가 많이 재생된 장르를 먼저 찾는다. 가장 많이 재생된 장르라는 것은 해당 장르의 총 재생수를 기준으로 많은 순서대로 수록하게 된다. 장르 내에선 재생수를 기준으로 2 곡을 수록하게 되는데 횟수가 같다면 고유 번호가 낮은 노래를 먼저 수록하면 된다.  뭔가 SQL 문제로 나올만한 내용이긴 한데 해시 카테고리의 문제이고 대충 보면 HashMap을 써야 할 거 같다.  private static class Music { int index; int play; ..

[Programmers] 구명보트 JAVA

[Programmers] 구명보트 - LV 2접근그리디투 포인터풀이무인도에 갇힌 사람들이 구명보트를 통해 탈출하는 문제로 구명보트에는 무게 제한이 있기 때문에 무게 제한을 만족하며 모든 사람을 구출하기 위해 필요한 구명보트 개수의 최솟값을 구하는 문제이다. 그런데 구명보트는 작기 때문에 한 번에 최대 2명씩 밖에 탈 수 없다.  2명, 2명이 한 보트당 최대 인원이다. 이 2명이라는 내용을 제대로 읽지 않아 불 필요하게 복잡한 코드와 함께 통과에 실패했다. 보트의 제한 무게가 40kg 이상 240kg 이하이기 때문에 무게만 맞춘다면 몇 사람이 타던 상관이 없는 줄 알고 풀었는데 보트에는 2명밖에 태울 수 없었다. 사실 너무 간단한 문제였다. public int solution(int[] people..

[Programmers] 피로도 JAVA

[Programmers] 피로도 - LV 2 접근완전 탐색풀이피로도가 주어지고 던전을 돌 때마다 던전이 요구하는 피로도가 소모된다. 던전에 입장하기 위한 최소 피로도가 존재할 때 가장 많은 던전을 탐험할 때 몇 개의 던전 탐험이 가능한지 구하는 문제이다. 그리디나 dp도 생각은 해봤는데 최소 피로도가 존재해 이전 선택이 다음 선택에 영향을 미치다 보니 그냥 완전탐색으로 풀었다.  private static int answer; public int solution(int k, int[][] dungeons) { answer = 0; boolean[] isVisited = new boolean[dungeons.length]; dfs(k, dungeons..

[Programmers] 더 맵게 JAVA

[Programmers] 더 맵게 - LV 2 접근힙풀이음식의 스코빌 지수가 주어지고 모든 음식의 스코빌 지수를 K 이상으로 만드는 문제이다. 음식을 섞어 스코빌 지수를 올릴 수 있고 음식을 몇 번 섞어야 모든 음식의 스코빌 지수가 K를 넘는지 구해야 한다. 힙 카테고리의 문제로 힙을 통해 구현된 우선순위 큐를 사용하면 간단하게 풀 수 있다. public int solution(int[] scoville, int K) { PriorityQueue pq = new PriorityQueue(); for (int i : scoville) { pq.offer(i); } int answer = 0; while (!pq.isEm..

728x90