programmers 69

택배상자 [자바]

🧫 문제 분석✔️ 출처택배상자 level 2📖 문제 메인 컨테이너 벨트는 1부터 n까지 순서대로 한쪽 방향으로 내려옴보조 컨테이너 벨트는 stack구조, LIFO  주어진 입출력(order)의 요소들을 순서이면서 택배상자 번호라고 가정하고 풀이한다. 1. order[i]의 택배상자 번호 전까지 메인 벨트의 상자를 보조 컨테이너 벨트에 넣는다.2. order[i]의 택배상자 번호와 현재 메인 벨트 상자의 번호가 같은지 확인한다.3. order[i]의 택배상자 번호와 보조 벨트의 입구쪽 상자의 번호가 같은지 확인한다. 4. 2,3 번 둘다 아니라면 더이상 실을 수 없으므로 종료한다. 5. 이를 order의 모든 상자수만큼 반복한다.  🔅 문제 풀이import java.util.Stack;class So..

programmers/Lv 2 2025.01.20

뒤에 있는 큰 수 찾기 [자바]

🧫 문제 분석✔️ 출처뒤에 있는 큰 수 찾기 level 2📖 문제 스택 구조를 써야될거같은 느낌이 든다.  스택이 비어있다면 숫자를 넣는다.  스택이 비어있지 않다면 1. 스택의 TOP 원소와 현재 숫자를 비교해서 더 크다면 그 수가 뒷 큰 수 이다.2. TOP원소를 꺼내서 numbers에 있었던 당시 인덱스를 answer 배열의 인덱스에서 뒷 큰 수를 넣어준다.이를  1번이 false일 때까지 반복한다. 마지막으로 스택에 남은 뒷 큰 수가 없는 숫자들은 -1로 처리해준다. 🔅 문제 풀이 import java.util.Stack;class Solution { // 스택을 이용 // idx를 함께 저장 // 스택 top 원소 뒷 큰수 넣고, pop() public int[] s..

programmers/Lv 2 2025.01.16

피로도 [자바]

🧫 문제 분석✔️ 출처피로도 level 2📖 문제 현재 피로도 k >= 최소 필요 피로도 인 조건을 따져서 백트래킹 완전탐색을 하면 된다. (최소 필요 피로도 >= 소모 피로도) 문제에서 던전 개수가 8 이하이기에 완전탐색을 해도 시간복잡도가 괜찮을 거 같다는 생각이 들었다.  🔅 문제 풀이import java.util.Arrays;class Solution { // 현재 피로도 (k), [최소 필요 피로도, 소모 피로도] // 최필피 >= 소피 boolean[] visited; int max = 0; public int solution(int k, int[][] dungeons) { visited = new boolean[dungeons..

programmers/DFS-BFS 2025.01.16

혼자서 하는 틱택토 [자바]

🧫 문제 분석✔️ 출처혼자서 하는 틱택토 level 2📖 문제 단순 구현 문제인듯 하다. 간단하다. 머쓱이가 잘못 둔것과 별개로 그저 현재 주어진 게임판이 나올수 있는 게임 상황인지 아닌지만 판단하면 된다.  내가 생각했을 때 나올 수 없는 상황을 생각해봤다.  나올 수 없는 상황O의 개수 - 2 >= X 개수 O의 개수 O가 빙고했는데 X의 개수가 O와 같거나 클때X가 빙고했는데 O의 개수가 클때O 빙고가 우선권을 가짐 (O 빙고와 X빙고 둘다 있을 경우)  처음 O와 X의 개수를 구하고 위 2가지 경우에 대해서 체크한다음 이상이 없다면가로, 세로, 대각선 빙고를 체크해서 아래 2가지 경우에 대해서 체크한다.  🔅 문제 풀이class Solution { // 나올 수 없는 상황 // O..

programmers/Lv 2 2025.01.14

리코쳇 로봇 [자바]

🧫 문제 분석✔️ 출처리코쳇 로봇 level 2📖 문제 BFS 문제로 다른점은 한방향으로 쭉 가야한다는 것과D라는 장애물이나 가장자리 즉, 배열의 범위를 넘어서는 곳을 만나면 멈춘다는 것이다.  장애물을 만나거나, 가장자리 (배열 범위)를 넘어선 곳을 만날때 멈춘 자리가 G(목표지점) 인지 확인하면 되는 단순한 문제이다. 🔅 문제 풀이import java.util.Queue;import java.util.LinkedList;class Solution { boolean[][][] visited; int[] dx = {0, 0, 1, -1}; int[] dy = {1, -1, 0, 0}; int answer = 0; class Token { int y; ..

programmers/DFS-BFS 2025.01.09

광물 캐기 [자바]

🧫 문제 분석✔️ 출처광물 캐기 level 2📖 문제 백트래킹 문제로 곡괭이의 내구도 :  5한 번 선택한 곡괭이는 터질때까지 사용광물은 주어진 순서대로 채광 종료 조건은 모든 곡괭이 내구도 0 이거나 모든 광물을 채광했을 경우 이다.이때 최소 필요도를 구하는 것이 이 문제의 답이다.  곡괭이 하나 선택하고, 최대 5개 캐고 하면서 백트래킹 하면 된다. 🔅 문제 풀이class Solution { // 0 : 다이아, 1 : 철 , 2: 돌 int[][] fatigue = {{1, 1, 1}, {5, 1, 1}, {25, 5, 1}}; int minFatigue = Integer.MAX_VALUE; public int solution(int[] picks, String[]..

programmers/DFS-BFS 2025.01.08

연속된 부분 수열의 합 [자바]

🧫 문제 분석✔️ 출처연속된 부분 수열의 합 level 2📖 문제 비 내림차순 정렬 : 오름차순 정렬 흔한 투 포인터 문제이다. 투 포인터로 값을 합산하고 k와 비교하여 크다면 앞 포인터를 움직이고 그만큼 빼고,작다면 뒤 포인터를 움직이고 그만큼 더한다. 짧은 길이의 수열 인덱스만 갖는 배열을 준비한다. 배열의 길이가 100만까지니까 1000001 까지 해서 최댓값으로 초기에 설정한다.  투 포인터의 합계가 k와 같다면 앞 포인터 인덱스 - 뒤 포인터 인덱스 한 값이 짧은 길이의 수열 인덱스 배열과 비교하여 가장 짧은지 확인하는데 같다면 넘어가고, 더 짧다면 갱신해주면된다. 자세한건 코드를 참조    🔅 문제 풀이class Solution { // 투 포인터 문제 예상 // 연속된 부분 ..

programmers/Lv 2 2025.01.04

두 원 사이의 정수 쌍 [자바]

🧫 문제 분석✔️ 출처두 원 사이의 정수 쌍 level 2📖 문제 많이 틀렸고, 질문도 보면서 참고하면서 풀었다.  처음에는 규칙이 있나 해서 규칙을 찾아서 해봤는데 그건 작은 값이였을때만이여서 의미 없었고,임의의 좌표를 생성하고 그 좌표까지의 거리가 r1보다 크면서 r2 보다 작은 것을 찾는 방식을 했는데 당연히 O(n^2) 라서 안된다.   핵심은 두원의 특정 x값일 때 두 원의 y값 사이를 구하는 것이다. (혹은 특정 y값일 대 두원 사이의 x값)  중요한 것은 r2의 경우 r2의 y값을 내림처리하고r1의 y값을 올림 처리해야한다.  x =1 일때 뿐만 아니라 그외에도 원의 방정식에서 x값을 넣어 구한 해당 원의 y값은 x = 0, y = 0 일때를 제외하고는 해당 원의 반지름보다 작다. r2를..

programmers/Lv 2 2025.01.03

요격 시스템 [자바]

🧫 문제 분석✔️ 출처요격시스템 level 2📖 문제 핵심은 A 나라의 폭격 미사일을 모두 요격하면서, 요격 미사일 개수가 최소가 되게하는 것이다.최소한의 비용으로 최대한의 효율 즉, 탐욕법이라고 볼 수 있다. 또한 요격 미사일은 개구간 (s, e)에서 s, e위치에서 요격 미사일로 요격 불가능하다. 제한사항을 보면 0부터 1억까지 s와 e가 분포되어있기에 단순히 미사일이 지나간 좌표를 배열로 만들어서 카운트하는 것은 불가능하다는 것을 알 것이다.  그렇다면 참고해볼 것은 targets의 길이가 50만이라는 점이다. 뭔가 배열 정렬, 혹은 탐색 등으로 문제 풀이를 생각해보는 것이다.  필자는 고민해보다가 A나라의 폭격 미사일들을 s(시작 좌표)로 정렬그리고 하나의 폭격 미사일의 범위에 대해서 다른 미..

programmers/Lv 2 2024.12.30

스킬트리

🧫 문제 분석✔️ 출처스킬트리 level 2📖 문제 skill 매개변수에는 스킬 순서가 담겨있고 skill_trees는 각 스킬트리들이 담겨있다.  여기서 핵심은 스킬순서에 있는 모든 스킬이 다 스킬트리에 있을 필요 없고 스킬 순서만 맞으면 가능한 스킬트리라는 것이다. 🔅 문제 풀이import java.util.*;class Solution { public int solution(String skill, String[] skill_trees) { HashMap map = new HashMap(); int answer = 0, rightSequence = 0; // 맵 초기화 for (int i = 0; i    처음에는 스킬순서에..

programmers/Lv 2 2024.06.28