[백준] 21736번 : 헌내기는 친구가 필요해 - JAVA
·
알고리즘/Java 알고리즘
문제https://www.acmicpc.net/problem/21736 문제 풀이딱 BFS 기초 문제이다. 가장 중요한 건? "방문철씨" (방문처리) 1. Queue 에 처음 도연이의 위치를 저장한다.더 이상 도연이의 위치를 탐색할 필요는 없으므로 방문처리를 한다.if (board[i][j] == 'I') { queue.offer(new int[]{i, j}); visited[i][j] = true; } 2. 사방탐색으로 이동할 수 있는 곳이면 Queue에 추가한다.1) 배열을 만들어서 상하좌우 움직임을 저장한다. 그 후 0~3 인덱스를 탐방한다.int[] dr = {0, 0, -1, 1};int[] dc ..
[프로그래머스] 상담원 인원 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://school.programmers.co.kr/learn/courses/30/lessons/214288 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr문제현대모비스는 우수한 SW 인재 채용을 위해 상시로 채용 설명회를 진행하고 있습니다. 채용 설명회에서는 채용과 관련된 상담을 원하는 참가자에게 멘토와 1:1로 상담할 수 있는 기회를 제공합니다. 채용 설명회에는 멘토 n명이 있으며, 1~k번으로 분류되는 상담 유형이 있습니다. 각 멘토는 k개의 상담 유형 중 하나만 담당할 수 있습니다. 멘토는 자신이 담당하는 유형의 상담만 가능하며, 다른 유형의 상담은 불가능합니다. 멘토는 동시에 참가자 한 ..
[프로그래머스] 메뉴 리뉴얼 - JAVA 풀이
·
알고리즘/Java 알고리즘
프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 방법orders에 있는 메뉴들을 오름차순으로 정렬한다. String 형식이니 char[] 로 변환하여 정렬한 후 다시 String 형식으로 변환주어진 주문 orders는 문자열로 되어 있다. 메뉴 항목의 순서는 주문마다 다를 수 있기 때문에,이를 모두 오름차순으로 정렬하여 같은 메뉴 조합은 항상 같은 문자열이 되도록 통일한다.order에 있는 메뉴들에서 course에 있는 길이 이상이면 combi 메서드를 실행한다course 배열에는 만들고 싶은 메뉴 조합의 길이들이 주어진다.각 길이에 대해 다음과 같은 과정을 반복한다.새로운 map을 생성한다.(여..
[백준] 17471 번 : 게리맨더링 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://www.acmicpc.net/problem/17471 백트래킹으로 푸는 문제이다.두개의 구간으로 지역들을 나누는 함수 → 백트래킹selected를 통해 true인 구역끼리 모으고 false인 구역끼리모아 가능한 부분집합의 모든 경우를 돈다.selected를 true로 바꾸고 한번, false로 바꾸고 한번더 진행한다.idx가 N보다 커지면 차이를 구할 수 있는 조건인지 확인하고 차이의 최소값을 갱신한다.두개의 구간의 사람 수 차이를 구하는 함수두 list에 담긴 구역 번호를 통해 입력받은 사람수를 확인하여 구한다.구역 번호들이 이어져있는지 확인하는 함수구역 번호 list에서 한 숫자를 queue에 넣고 이어져있는 구역들과 처음에 받은 list를 비교하며 존재하는 구역이 있다면 count를 ..
[백준] 5427 번 : 불 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://www.acmicpc.net/problem/5427 핵심을 정리해보자. 빈 공간(.), 벽(#), 상근이(@), 불(*)이 주어진다.불은 1초마다 네 방향으로 퍼진다. 벽은 불이 통과할 수 없다.상근이도 1초마다 네 방향으로 이동 가능하다. 역시 벽은 통과할 수 없다.상근이가 범위를 벗어나면 탈출 성공이다.불과 상근이가 동시에 같은 칸으로 이동하면 불이 먼저 이동한다.가장 빠르게 탈출하는 시간을 구하고, 불가능하면 "IMPOSSIBLE"을 출력해야 한다. Queue에 불도 같이 넣어주면 어떨까?Queue에 int[] { r , c , 0 or -2 , 걸린시간 }r 좌표c 좌표함께 어떠한 것이 있는지 0 이면 상근이, -2 이면 불여기까지 얼마나 시간이 걸렸는지처음에 Queue에 주어진 ..
[백준] 29704 번 : 벼락치기 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://www.acmicpc.net/problem/29704다이나믹 프로그래밍(DP)과 배낭문제이다. int[N+1][T+1] dp : i개의 문제가 있고, 남은 기한이 j일 때 아낄 수 있는 돈의 최대양을 저장하는 이차원 배열N+1 인 이유는 이전에 아무문제도 안풀었을 때가 필요하기 때문차례대로 걸리는 일수 d와 해당문제의 벌금 m을 받고 dp 에서 1~T까지의 기간 중 i가 d 이상이여서 해당 문제를 풀 수 있으면 둘을 비교해서 큰수를 저장한다.이전에서 j-d 인 기간중 아낀 돈과 합쳐준다. → 이번 문제를 풀었을 때이전 j 를 그대로 가져온다. → 이번 문제를 안풀었을 때dp[N][T] 의 값을 전체 합에서 빼준다.import java.io.BufferedReader;import java.i..
[백준] 16166 번 : 서울의 지하철 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://www.acmicpc.net/problem/16166다익스트라 문제! 가중치의 증가량이 1로 일정하기 때문에 while안에서 min 비교하는 식이 없어도 무관!List> 를 통해 각 line을 인덱스로 해서 속해져있는 역을 저장한다.Map min 를 통해 각 역까지의 최소 환승 횟수를 저장한다.역이 변칙적으로 주어지기 때문에 모든 역을 Map에 저장한다.최소환승횟수를 처음 MAX값으로 초기화해야하는데 이를 N 으로 설정한다.역이 서울역 0 일 경우에는 0으로 저장한다.PriorityQueue를 통해 { 라인 , 역 , 환승횟수 } 를 저장한다.역이 서울역일 경우 { 라인 , 0 , 0 } 을 제일 처음 pq에 넣어주고 bfs를 한다.bfs 시작 → 모든 line을 List에서 탐색하며 이번..
[백준] 7511 번 : 소셜 네트워킹 어플리케이션 - JAVA 풀이
·
알고리즘/Java 알고리즘
https://www.acmicpc.net/problem/7511분리집합 ( Disjoint Set ) 문제이다. 필요한 요소makeSet() : 초기에 본인의 대표는 본인으로 초기화 해놓는 과정int[] rep : 본인들마다 연결된 친구숫자 중 대표친구숫자를 저장한다.이때 대표친구숫자는 연결된 가장 작은수로 한다 ( 큰수보다 메모리 차지를 덜한다 )int find(int x) : 본인의 대표친구를 찾는 find 함수void unioin(int x,int y) : 두 대표를 친구로 연결해주는 함수두 대표 중 작은 숫자를 큰 숫자 대표로 rep 배열에 저장한다.풀이 과정a,b 두 사람을 친구로 연결해준다. “너의 대표를 가져와!”각각 두사람의 대표 A B 를 찾는다 A = find(a) B = find(b..