dfs 7

프로그래머스 - 무인도 여행[Java]

https://school.programmers.co.kr/learn/courses/30/lessons/154540 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr   아직 실력이 부족하여 풀이가 아주그냥 엉망진창이다. 하지만 구현 하고자 하는 의도는 명확했다;;dfs를 이용하여 순회순회하다가 더이상 나아갈 곳이 없으면 돌아오면서 누적합을 구한다.이렇게 구한 누적합을 큐에 저장한다.큐에 있는 값들을 정수 배열에 넣고 정렬 후 반환개인적으로 이 문제에서 가장 중요하면서 어려웠던 부분은 돌아오면서 누적합을 구하는 과정이라고 생각한다. import java.util.*;class Solution { pu..

프로그래머스 - Lv2 소수찾기(Java)

https://school.programmers.co.kr/learn/courses/30/lessons/42839 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 이 문제에서 가장 어려웠던 부분은 입력된 문자열로 만들 수 있는 숫자를 모두 구하는 것 이다. 처음에 dfs 방식을 사용하면 되겠다고 생각을 했는데 dfs를 공부한지 오래되서 다른 풀이를 참고하면서 공부했다. import java.util.*;class Solution { static Set set; static boolean[] visit = new boolean[7]; public int solution(String ..

백준-4963번/섬의 개수(java)

문제 이해 이 문제는 2667번 단지번호붙히기 문제와 매우 유사한 문제라는 생각을 했다.https://www.acmicpc.net/problem/2667 하지만 차이점도 존재했는데, 단지번호 붙히기 문제는 위아래,좌우 로만 이동이 가능했지만 이번 문제는 대각선 이동도 고려해줘야 했다.  문제 풀이 대각선 이동을 위해 정적 변수로 배열 dx, dy를 선언해주었다.static int[] dx={-1,0,1};static int[] dy={-1,0,1};  그리고 지도를 돌면서 dfs(깊이우선탐색)을 수행해줌으로써 연결성분을 구할 수 있다.for(int i=0; i   public static void dfs(int x, int y){ Map[x][y]=0; for(int i=0; i=0 && nx..

알고리즘/백준 2024.07.24

백준-2667번/단지번호붙이기(java)

문제 이해 연결성분을 구하는 과정과 유사하기 때문에 dfs의 성질을 이용하여 풀어야겠다고 생각 하였다.이동은 위,아래,좌,우 만 가능하다따라서 이차원 배열에서 x좌표를 +1,-1하거나 y좌표를 +1,-1하는 방식으로 이동을 할 수 있다는 뜻이다. 문제 해결 static int[] dx = {-1, 1, 0, 0};static int[] dy = {0, 0, -1, 1}; public static void dfs(int x, int y) { arr[x][y] = 0; count += 1; for (int i = 0; i = 0 && nx = 0 && ny  arr[dx][dy]가 1 일때만 이동하여서 연결성분을 알아낼수있도록 하였고, if문에 조건을 넣어서 배열의 영역을 벗어나지 않도록 하..

알고리즘/백준 2024.07.23

백준-2529번/부등호 (java)

문제 이해 부등호로 이루어진 문자열이 주어지면 부등호 사이에 올수있는 모든 숫자열 중 최솟값과 최대값을 구해주면 된다.모든 경우를 구해줘야 하므로 dfs를 이용하면 쉽게 구할 수 있다. 문제 풀이 맨 앞의 숫자가 0~9까지 중 올수있는 모든 경우의 수를 구해줘야 하므로 for문을 이용하여 dfs를 호출해준다.for (int i = 0; i   ※매개변수start ==>가장 최근에 삽입된 숫자(dfs에서는 start뒤에 들어올 숫자를 결정)count ==> 삽입된 숫자의 갯수num ==> 부등호 사이에 들어가는 숫자들을 표현한 문자열static void dfs(int start, int count, String num) { if (count == N) { number.add(num); /..

알고리즘/백준 2024.07.16

백준-14889번/스타트와 링크 (java)

문제 접근 두 팀의 능력치의 최소 차이를 구하면 된다. 인원의 절반은 스타트 팀, 나머지는 링크 팀으로 배치시키는 모든 경우의 수를 구해야 하므로 dfs를 수행해주면 된다. dfs의 종료 조건 :  전체 인원의 절반이 스타트 팀으로 빠졌다면 그 상황에서의 능력치의 차이를 구해주면 된다.   문제 풀이 N = 인원수S = 개인 능력치를 저장하는 이차원 배열visit = dfs에서 방문 유무를 확인할때 쓰이는 일차원 배열Min = 최소 능력치 차이를 저장static int N;static int[][] S;static boolean[] visit;static int Min = Integer.MAX_VALUE;  idx = 현재 선택된 사원count =  스타트 팀으로 들어간 인원 수 (절반이 스타트 팀에 들..

알고리즘/백준 2024.07.15

백준-14501번/퇴사 (java)

문제 이해 T[i] ==> 상담하는데 걸린 시간P[i] ==> 상담으로 받는 금액 정해진 시간안에 받을 수 있는 최대 금액을 구하는 문제이다. DFS를 이용하면 DP를 이용하는 것 보다 쉽게 구할 수 있다. DFS 탈출 조건==> 현재 날짜에서 상담에 걸리는 시간을 더했을때 N보다 크거나 같을 경우 문제 풀이static void dfs(int idx, int pay){ if(idx>=N){ result = Math.max(pay,result); return; } if(idx+T[idx] idx+T[idx]가 N 보다 작을 경우 즉, 상담을 할 수 있는 경우 재귀 호출을 이용해서 상담을 완료한 다음 날짜와 누적 금액을 넘겨준다. 상담이 불가능한 경우 다음 날짜와 가..

알고리즘/백준 2024.07.07