Notice
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 자료구조
- 창의충전소
- 노마드코더
- springboot
- BFS
- Project Bee
- 이영직
- 경우의 수
- 비트마스킹
- 티스토리챌린지
- 완전탐색
- FlatList
- multipart upload
- 오블완
- 원복
- React Natvive
- bfs dfs
- 구현
- service 테스트
- ReactNative
- 폴더구조
- 버튼 활성화
- 상속 관계 매핑
- Navigation
- 백준 1992
- React Native
- 해외 대외활동
- 휴대폰 기기
- react
- web view
Archives
- Today
- Total
유미의 기록들
[백준 3주차 - 12869] 뮤탈리스크 (Java) 본문
728x90
반응형
📌문제
📝 풀이과정
처음에는 내림차순 정렬을 해서 9,3,1 차례로 빼면서 모두 0이하일 때까지 반복하면 최솟값을 구할 수 있다고 생각했다... 하지만 예외1에서도 그 방법은 맞지 않았다 너무 단순하게 생각한 것이다😓
단순하게 9,3,1 만 빼는 것이 아니라 6가지의 경우의 수가 있다
이렇게 그래프로 나타내보면 모든 경우의 수에서 (0,0,0)에 도달하는 최소의 횟수를 구할 수 있다. 즉, 레벨별로 탐색하여 최단거리를 구하는 개념으로 생각해보면 BFS로 풀 수 있는 것을 알 수 있다.
💻코드
import java.util.Scanner;
import java.io.*;
import java.util.*;
public class Main{
static int n;
static int scv[]=new int[3];
static int visited[][][]=new int[64][64][64];
static Queue<Pair> queue=new LinkedList<>();
static int [][] dn={
{9,3,1},
{9,1,3},
{3,1,9},
{3,9,1},
{1,3,9},
{1,9,3}
};
static class Pair{
int a,b,c;
Pair(int a,int b,int c){
this.a=a;
this.b=b;
this.c=c;
}
}
static int solve(int a,int b,int c){
visited[a][b][c]=1;
queue.add(new Pair(a,b,c));
while(!queue.isEmpty()){
Pair front=queue.poll();
if(visited[0][0][0]!=0) break;
for(int i=0;i<6;i++){
int na=Math.max(0,front.a-dn[i][0]);
int nb=Math.max(0,front.b-dn[i][1]);
int nc=Math.max(0,front.c-dn[i][2]);
if(visited[na][nb][nc]!=0) continue;
visited[na][nb][nc]=visited[front.a][front.b][front.c]+1;
queue.add(new Pair(na,nb,nc));
}
}
return visited[0][0][0]-1;
}
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
n=Integer.parseInt(br.readLine());
String[] input=br.readLine().split(" ");
for(int i=0;i<n;i++){
scv[i]=Integer.parseInt(input[i]);
}
System.out.println(solve(scv[0],scv[1],scv[2]));
}
}
728x90
반응형
'코딩테스트 기록 > 알고리즘 문제' 카테고리의 다른 글
[백준 3주차 - 12851] 숨바꼭질2 (Java) (0) | 2024.04.10 |
---|---|
[백준 3주차 - 16637] 괄호 추가하기 (Java) (0) | 2024.04.09 |
[백준 2주차 - 2178] 미로탐색 (Java) (1) | 2024.04.04 |
[백준 3주차 - 16234] 인구이동 (Java) (0) | 2024.04.02 |
[백준 2주차 - 1992] 쿼드트리 (Java) (0) | 2024.02.24 |
Comments