9_yoon
개발저장소
9_yoon
전체 방문자
오늘
어제
  • 분류 전체보기 (101)
    • 알고리즘 (52)
      • BJ (40)
      • 프로그래머스 (0)
      • SWEA (10)
      • JO (2)
    • 이론 공부 (7)
      • 네트워크 (2)
      • 알고리즘 (2)
      • Java (1)
      • Web (1)
      • 기타 (1)
    • 개발 공부 (35)
      • Project (1)
      • JavaScript (1)
      • Typescript (1)
      • Spring (12)
      • Java (2)
      • Next JS (7)
      • React (3)
      • Vue (1)
      • Web (5)
      • 기타 (2)
    • 기타 (7)
      • SSAFY (7)
      • 일상 (0)

인기 글

태그

  • 싸피7기
  • 스프링
  • SSAFY
  • 김영한 스프링
  • 백준
  • 싸피
  • SWEA
  • NextJS
  • React
  • 노마드코더

최근 글

티스토리

반응형
hELLO · Designed By 정상우.
9_yoon
알고리즘/BJ

[BJ] 백준 2116 주사위쌓기(JAVA)

[BJ] 백준 2116 주사위쌓기(JAVA)
알고리즘/BJ

[BJ] 백준 2116 주사위쌓기(JAVA)

2022. 3. 16. 21:40
728x90
반응형

문제

https://www.acmicpc.net/problem/2116

 

풀이 방법

구현문제로 브루투포스 알고리즘을 사용하면 된다.
우선 나는 문제에 있는 ABCDEF을 보고 각 마주보는 면의 인덱스를 미리 저장해뒀다.
다음과 같은 순서로 구현했다.
1. 맨 아래에 올 주사위의 윗면을 정해준다. (6면 전부 다 구해보기)
2. 윗면이 정해졌으면 옆면중에서 가장 큰값을 고른다.
3. 윗면의 값과 위에서 골랐던 옆면 중 가장 큰값을 가지고 주사위를 쌓으러 간다.
//재귀함수 시작 (아래서 2번째 주사위부터 쌓아올리는 함수)
1. 아래에 있는 주사위의 윗면에 해당하는 값을 현재 주사위에서 찾는다.
=> 자동으로 윗면의 인덱스가 정해진다.
2.  옆면중에서 가장 큰값을 고른다.
3. 그 다음 주사위를 쌓으러 간다.
// 주사위를 다 쌓을때 까지  1~3번을 반복한다. 
4. 주사위를 다 쌓으면 현재 max에 저장된 값과 현재 sum값을 비교해서 더 큰 값을 넣는다. 

 

제출 코드

import java.io.*;
import java.util.*;
public class BJ_2116_주사위쌓기 {
static int N, Max;
static int[][] dice;
static int[] op = { 5, 3, 4, 1, 2, 0 }; //각 마주보는 면의 인덱스를 저장
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken()); // 주사위 개수
dice = new int[N][6];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < 6; j++) {
dice[i][j] = Integer.parseInt(st.nextToken());
}
}
Max = -1;
//윗 면 정하기
for (int i = 0; i < 6; i++) {
int max = 0;
for (int j = 0; j <6; j++) { //옆면 중에서 가장 큰 값
if( j ==i || j == op[i]) continue;
max = Math.max(max, dice[0][j]);
}
up(dice[0][i] , max, 1); //윗면의 "값"과 옆면중에서 가장 큰 값
}
System.out.println(Max);
}
private static void up(int top, int sum, int cnt) { //cnt: 현재까지 올린 주사위 개수
if(cnt == N) {
Max = Math.max(sum, Max);
return ;
}
//현재 주사위에서 top에 해당하는 인덱스를 찾아야함
int idx=0;
for (int i = 0; i <6; i++) { //이전 주사위의 탑에 해당하는 값을 현재 주사위에서 찾기
if(dice[cnt][i] == top) {
idx =i;
break;
}
}
int nextTop = op[idx]; //현재 주사위의 윗면의 인덱스 결정
int m = 0;
for (int j = 0; j <6; j++) { //옆면중에서 가장 큰 값
if( j ==nextTop || j == idx) continue;
m = Math.max(m, dice[cnt][j]);
}
up(dice[cnt][nextTop], sum+m, cnt+1);
}
}

 

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'알고리즘 > BJ' 카테고리의 다른 글

[BJ] 백준 11057 오르막 수 (JAVA)  (0) 2022.03.18
[BJ] 백준 10844 쉬운 계단 수 (JAVA)  (0) 2022.03.17
[BJ] 백준 11463 1로 만들기(JAVA)  (0) 2022.03.14
[BJ] 백준 1753 최단경로(JAVA)  (0) 2022.03.12
[BJ] 백준 10158 개미(JAVA)  (0) 2022.03.10
  • 문제
  •  
  • 풀이 방법
  •  
  • 제출 코드
'알고리즘/BJ' 카테고리의 다른 글
  • [BJ] 백준 11057 오르막 수 (JAVA)
  • [BJ] 백준 10844 쉬운 계단 수 (JAVA)
  • [BJ] 백준 11463 1로 만들기(JAVA)
  • [BJ] 백준 1753 최단경로(JAVA)
9_yoon
9_yoon
배울게 넘쳐나는 개발 세상에서 묵묵히 걸어가며 지식을 쌓는 신입 개발자

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.