programmers 69

행렬 테두리 회전하기 [자바]

🧫 문제 분석✔️ 출처행렬 테두리 회전하기 level 2📖 문제 현재 좌표에서 이동하는 문제다.1~row*columns 까지 이중 배열에 숫자를 각 넣어주고 그래프 탐색처럼, 이동 방향을 정하는 배열을 만든다. 이동 방향은 시계 방향 즉, 좌 하 우 상 순으로 움직인다. 이를 코드로 짜면 아래처럼 된다.  // 좌,하,우,상 int[] dy = {0, 1, 0, -1}; int[] dx = {1, 0, -1, 0};  방향을 정하고 주어진 queries의 좌표값 만큼 이동하면 된다. 주의할 점은 문제에서 queries 각 행은 [x1, y1, x2, y2] 로 주어지는데 x1행 y1열 이다. x2 - x1, y2 - y1 만큼 방향으로 이동하면서 이전 값을 넣어주고 기존 값을 따로 저..

programmers/Lv 2 2025.02.11

다리를 지나는 트럭 [자바]

🧫 문제 분석✔️ 출처다리를 지나는 트럭 level 2📖 문제 2번 재시도 끝에 풀은 문제다.  처음 시도에는 다리 위에 올라간 트럭이 경과한 시간을 잘 못 설계해서 계속 틀렸다.  두 번째 시도는 조건문 하나를 추가하지 않아서 틀렸었다. 4,5,6,9번  다리위에 있는 트럭을 제거해야하는 경우의 수는1. 다리에 트럭이 현재 올라갈 수 있는 트럭 최대 갯수만큼 있는 경우2. 새로운 트럭이 올라간다 했을 때 무게 하중을 넘어가는 경우3. 위 두 경우와는 별개로 다리의 맨 앞 트럭이 다리를 다 건너(시간이 지나) 빠져나가는 경우 이 세가지 경우에 대해서 트럭을 잘 빼준다면 문제없이 쉽게 풀 수 있을 것이다.  나는 3번을 안해서 계속 틀렸었다.. 🔅 문제 풀이import java.util.*;class..

programmers/Lv 2 2025.02.04

미로 탈출 [자바]

🧫 문제 분석✔️ 출처미로 탈출 level 2📖 문제 단순 BFS이며,레버를 당기고 난 후 출구로 나갈 수 있으며레버를 당기지 않아도 출구 지역은 지나다닐 수 있고모든 지점은 여러 번 지나갈 수 있다.  나는 출발점을 찾고 거기서 부터 BFS로 L를 탐색한다음현재 위치에서 다음 위치가 레버이면서 아직 레버를 안당겼다면여태까지 방문한 기록을 없애고, 큐를 초기화 시킨 다음 레버를 당기고(레버 위치를 큐에 담고), 레버 위치에 방문했다고 표시한다. 그리고 레버 위치에서부터 시작하게끔 현재 위치에서 탐색을 중지시킨다.(break)레버 위치에서부터 다시 BFS 탐색을 해서 E인 탈출구를 찾는다. 🔅 문제 풀이import java.util.*;class Solution { // 1. 레버로 이동 ..

programmers/DFS-BFS 2025.02.03

배달 [자바]

🧫 문제 분석✔️ 출처배달 level 2📖 문제  거리 값이 존재하는 그래프 문제이 문제를 통해 다익스트라, 플로이드 워샬 등거리 값이 존재하는 그래프의 탐색이 얼마나 부족한지 깨달았다. 해당 문제를 BFS, 플로이드 워샬, 다익스트라로 풀어보았다. 그리고 거리가 있는 그래프에 대한 간단한 정리를 할 예정이다.  🔅 문제 풀이 - BFSimport java.util.*;class Solution { // N개의 마을, K : 갈 수 있는 거리 // BFS 탐색으로 K - 각 마을까지의 비용 >= 0 인 곳을 방문 int[] visited; public int solution(int N, int[][] road, int K) { int[][] graph = n..

programmers/DFS-BFS 2025.02.02

숫자 카드 나누기 [자바]

🧫 문제 분석✔️ 출처숫자 카드 나누기 level 2📖 문제 영희, 철수 각각 하나의 카드를 선택해서 소인수 분해 후분해한 수들을 영희 카드와 철수카드를 나눠본다.  영희 카드 중 하나를 소인수분해 했을 경우영희 자신의 모든 카드 수는 소인수로 나눠지면서, 철수 것은 나눠지면 안된다.  반대의 경우도 마찬가지이다.  🔅 문제 풀이import java.util.*;class Solution { // 가장 작은 수 선택후 소인수 분해 // 분해된 수들로 해당 배열을 다 나눠본다. boolean으로 나눠지는지 확인 // 다 나눠지면 상대 카드들을 나눠본다. boolean으로 나눠지는지 확인 int max = 0; public int solution(int[..

programmers/Lv 2 2025.02.01

호텔 대실 [자바]

🧫 문제 분석✔️ 출처호텔 대실 level 2📖 문제 시작 시간을 기준을 정렬후빈 방이면 방을 배정해주고, 끝나는 시간 + 10 을 해준다. 그리고 다음 예약자는 우선, 배정된 방중 퇴실후 시간대인 방을 찾는다.없다면 새로운 빈 방을 배정해준다.  이를 반복하면 된다.  예약 시간이 자정을 넘어가는 경우는 없다.  🔅 문제 풀이import java.util.*;class Solution { public int solution(String[][] book_time) { // 최대 룸 개수, 시-분 Integer[] time = new Integer[1000]; // 시작 시간 순 정렬 Arrays.sort(book_time, (o1, o2) -..

programmers/Lv 2 2025.02.01

마법의 엘리베이터 [자바]

🧫 문제 분석✔️ 출처마법의 엘리베이 level 2📖 문제  우선 예제를 보고 생각해보면어떨 때는 올림이 좋고 어떨 때는 내림이 좋다. 2554는 16번2454는 어떨까?단순히 5라고 올리면 17번이 된다.  하지만 전부 내리면 15번이면 된다. 555를 예로 들어보자. 5를 내리면 15번이지만5를 다 올리면 +1 5번  = 560+10 4번 = 600+ 100 4번 = 1000- 1000 1번 = 0 14번 이 된다.  즉, 5가 핵심이다. 연속으로 5가 나오면 올리는 것이 좋고아니라면 내리는 것이 좋다.  뒤에 숫자부터 판별한다.  🔅 문제 풀이class Solution { // 현재 층수 + 버튼 수로 이동 // 0보다 작으면 안움직임 // 0층이 가장 아래층 //..

programmers/Lv 2 2025.01.30

소수 찾기 [자바]

🧫 문제 분석✔️ 출처소수 찾기 level 2📖 문제 numbers의 각 자릿수를 조합하여 숫자를 만들고 그 수가 소수인지 카운트  소수 판별 + 완전탐색 문제 핵심0으로 시작하지 않음2는 소수짝수는 소수가 아님조합된 수 중복 체크🔅 문제 풀이class Solution { boolean[] visited; boolean[] check = new boolean[10000000]; int answer = 0; public int solution(String numbers) { char[] num = numbers.toCharArray(); visited = new boolean[num.length]; dfs(..

programmers/DFS-BFS 2025.01.24

쿼드압축 후 개수 세기 [자바]

🧫 문제 분석✔️ 출처쿼드압축 후 개수 세기 level 2📖 문제 분할 정복 문제 처음은 전체를 다 돌아본다. for문으로 주어진 영역이 모두 같은 수 인지 확인 아니라면 4등분으로 영역을 나눠서 각각 영역별로 재호출영역 길이 / 2 한 값으로 4등분한다. 여기서는 행의 길이가 영역을 정한다. 비슷한 문제 포스팅 백준 1074번 : Z백준 1030번 : 프렉탈 평면백준 2447번 : 별 찍기 - 10백준 2448번 : 별 찍기 - 11🔅 문제 풀이class Solution { // 분할 정복 // for문으로 해당 영역 탐색 int[] count = new int[2]; public int[] solution(int[][] arr) { divAndConque..

programmers/Lv 2 2025.01.23

숫자 변환하기 [자바]

🧫 문제 분석✔️ 출처숫자 변환하기 level 2📖 문제 간단하지만 생각해볼게 좀 있는 문제최단경로 BFS로 풀어보자고 생각했다. 핵심x == y 일때,x로 y를 만들 수 없을때 bfs 탐색을 멈추는 조건중복 탐색 방지 (시간 초과 가능성)🔅 문제 풀이import java.util.Queue;import java.util.LinkedList;class Solution { // x -> y // x + n || x * 2 || x * 3 //bfs 최단 경로 boolean[] visited = new boolean[1000001]; public int solution(int x, int y, int n) { int answer = bfs(x,y,..

programmers/Lv 2 2025.01.21