サイコロ投げ(Java,Java)
29762 ワード
今回解決した問題.
白駿14499号サイコロ投げ
📕 提问链接
白駿14499号サイコロ投げ
📕 提问链接
❗¥コード import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Dice
{
int x,y,top,bottom,left,right,front,back;
public Dice(int x, int y)
{
this.x = x;
this.y = y;
}
public void setBottom(int bottom) {
this.bottom = bottom;
}
public void setLeft(int left) {
this.left = left;
}
public void setRight(int right) {
this.right = right;
}
public void setFront(int front) {
this.front = front;
}
public void setBack(int back) {
this.back = back;
}
public void setTop(int top) {
this.top = top;
}
}
public class Main {
static int n,m;
static int [][] map;
static Dice dice;
static int [] dx = {0,0,-1,1}; // 동 서 북 남
static int [] dy = {1,-1,0,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());
m = Integer.parseInt(st.nextToken());
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
dice = new Dice(startX,startY);
map = new int[n][m];
for(int i = 0; i < n; ++i)
{
st = new StringTokenizer(br.readLine());
for(int j = 0; j < m; ++j)
{
map[i][j] = Integer.parseInt(st.nextToken());
}
}
st = new StringTokenizer(br.readLine()); // 이동명령
StringBuilder sb = new StringBuilder();
while(st.hasMoreTokens())
{
int next = Integer.parseInt(st.nextToken())-1;
int curX = dice.x, curY = dice.y; // 현위치
int mx = curX + dx[next], my = curY + dy[next];
if(!isValid(mx,my)) continue;
dice.x = mx;
dice.y = my;
roll(next);
if(map[mx][my] == 0)
{
map[mx][my] = dice.bottom;
}
else
{
dice.setBottom(map[mx][my]);
map[mx][my] = 0;
}
sb.append(dice.top).append("\n");
}
System.out.print(sb.toString());
}
static void roll(int direc)
{
switch(direc)
{
case 0:
{
int tmpTop = dice.top,tmpBottom = dice.bottom, tmpLeft = dice.left, tmpRight = dice.right;
dice.setTop(tmpRight);
dice.setLeft(tmpTop);
dice.setRight(tmpBottom);
dice.setBottom(tmpLeft);
break;
}
case 1:
{
int tmpTop = dice.top,tmpBottom = dice.bottom, tmpLeft = dice.left, tmpRight = dice.right;
dice.setTop(tmpLeft);
dice.setLeft(tmpBottom);
dice.setRight(tmpTop);
dice.setBottom(tmpRight);
break;
}
case 2:
{
int tmpTop = dice.top,tmpBottom = dice.bottom,tmpFront = dice.front, tmpBack = dice.back;
dice.setTop(tmpFront);
dice.setFront(tmpBottom);
dice.setBack(tmpTop);
dice.setBottom(tmpBack);
break;
}
case 3:
{
int tmpTop = dice.top,tmpBottom = dice.bottom,tmpFront = dice.front, tmpBack = dice.back;
dice.setTop(tmpBack);
dice.setFront(tmpTop);
dice.setBack(tmpBottom);
dice.setBottom(tmpFront);
break;
}
}
}
static boolean isValid(int x, int y)
{
return x >= 0 && y >= 0 && x < n && y < m;
}
}
📝 に答える
地図上でサイコロを転がし、一瞬ごとに上部にある数字の問題を出力します.
Diceクラスを作成し、グローバル変数として宣言し、開始座標としてコンストラクション関数として作成し、上下左右の値を0に初期化します.
次に、サイコロを移動コマンドに対応する方向にスクロールして範囲外にします.範囲内の有効な値の場合は、踏んだ座標値が0であることを確認し、異なる条件を実行します.移動する場合は、現在の座標値とスクロール方向上下左右の値を入れ替えるだけで、移動終了時に上部の値を出力できます.
📜 ポスト
実施問題の説明が長すぎて100%理解できないようです.
今回もサイコロ面の初期値が0の条件は見られず、1がトップのときのサイコロ値を初期値として、時間を無駄にしましたハハハ
いつも問題を読む条件に集中しています!
Reference
この問題について(サイコロ投げ(Java,Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@jh5253/백준-14499-주사위-굴리기-Java자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Dice
{
int x,y,top,bottom,left,right,front,back;
public Dice(int x, int y)
{
this.x = x;
this.y = y;
}
public void setBottom(int bottom) {
this.bottom = bottom;
}
public void setLeft(int left) {
this.left = left;
}
public void setRight(int right) {
this.right = right;
}
public void setFront(int front) {
this.front = front;
}
public void setBack(int back) {
this.back = back;
}
public void setTop(int top) {
this.top = top;
}
}
public class Main {
static int n,m;
static int [][] map;
static Dice dice;
static int [] dx = {0,0,-1,1}; // 동 서 북 남
static int [] dy = {1,-1,0,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());
m = Integer.parseInt(st.nextToken());
int startX = Integer.parseInt(st.nextToken());
int startY = Integer.parseInt(st.nextToken());
int t = Integer.parseInt(st.nextToken());
dice = new Dice(startX,startY);
map = new int[n][m];
for(int i = 0; i < n; ++i)
{
st = new StringTokenizer(br.readLine());
for(int j = 0; j < m; ++j)
{
map[i][j] = Integer.parseInt(st.nextToken());
}
}
st = new StringTokenizer(br.readLine()); // 이동명령
StringBuilder sb = new StringBuilder();
while(st.hasMoreTokens())
{
int next = Integer.parseInt(st.nextToken())-1;
int curX = dice.x, curY = dice.y; // 현위치
int mx = curX + dx[next], my = curY + dy[next];
if(!isValid(mx,my)) continue;
dice.x = mx;
dice.y = my;
roll(next);
if(map[mx][my] == 0)
{
map[mx][my] = dice.bottom;
}
else
{
dice.setBottom(map[mx][my]);
map[mx][my] = 0;
}
sb.append(dice.top).append("\n");
}
System.out.print(sb.toString());
}
static void roll(int direc)
{
switch(direc)
{
case 0:
{
int tmpTop = dice.top,tmpBottom = dice.bottom, tmpLeft = dice.left, tmpRight = dice.right;
dice.setTop(tmpRight);
dice.setLeft(tmpTop);
dice.setRight(tmpBottom);
dice.setBottom(tmpLeft);
break;
}
case 1:
{
int tmpTop = dice.top,tmpBottom = dice.bottom, tmpLeft = dice.left, tmpRight = dice.right;
dice.setTop(tmpLeft);
dice.setLeft(tmpBottom);
dice.setRight(tmpTop);
dice.setBottom(tmpRight);
break;
}
case 2:
{
int tmpTop = dice.top,tmpBottom = dice.bottom,tmpFront = dice.front, tmpBack = dice.back;
dice.setTop(tmpFront);
dice.setFront(tmpBottom);
dice.setBack(tmpTop);
dice.setBottom(tmpBack);
break;
}
case 3:
{
int tmpTop = dice.top,tmpBottom = dice.bottom,tmpFront = dice.front, tmpBack = dice.back;
dice.setTop(tmpBack);
dice.setFront(tmpTop);
dice.setBack(tmpBottom);
dice.setBottom(tmpFront);
break;
}
}
}
static boolean isValid(int x, int y)
{
return x >= 0 && y >= 0 && x < n && y < m;
}
}
📝 に答える
地図上でサイコロを転がし、一瞬ごとに上部にある数字の問題を出力します.
Diceクラスを作成し、グローバル変数として宣言し、開始座標としてコンストラクション関数として作成し、上下左右の値を0に初期化します.
次に、サイコロを移動コマンドに対応する方向にスクロールして範囲外にします.範囲内の有効な値の場合は、踏んだ座標値が0であることを確認し、異なる条件を実行します.移動する場合は、現在の座標値とスクロール方向上下左右の値を入れ替えるだけで、移動終了時に上部の値を出力できます.
📜 ポスト
実施問題の説明が長すぎて100%理解できないようです.
今回もサイコロ面の初期値が0の条件は見られず、1がトップのときのサイコロ値を初期値として、時間を無駄にしましたハハハ
いつも問題を読む条件に集中しています!
Reference
この問題について(サイコロ投げ(Java,Java)), 我々は、より多くの情報をここで見つけました
https://velog.io/@jh5253/백준-14499-주사위-굴리기-Java자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
実施問題の説明が長すぎて100%理解できないようです.
今回もサイコロ面の初期値が0の条件は見られず、1がトップのときのサイコロ値を初期値として、時間を無駄にしましたハハハ
いつも問題を読む条件に集中しています!
Reference
この問題について(サイコロ投げ(Java,Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@jh5253/백준-14499-주사위-굴리기-Java자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol