KoreanFoodie's Study
SW 역량테스트 - [백준] 주사위 굴리기 문제 풀이/해답/코드 (C++ / JAVA) 본문
Data Structures, Algorithm/SW 역량테스트
SW 역량테스트 - [백준] 주사위 굴리기 문제 풀이/해답/코드 (C++ / JAVA)
GoldGiver 2020. 10. 15. 23:35
SW 역량 테스트 준비를 위한 핵심 문제들을 다룹니다!
해답을 보기 전에 문제를 풀어보시거나, 설계를 하고 오시는 것을 추천드립니다.
코드에 대한 설명은 주석을 참고해 주세요 :)
문제 링크 : www.acmicpc.net/problem/14499
해답 코드 :
#include <iostream>
#include <vector>
#include <deque>
using namespace std;
typedef struct pos {
int row;
int col;
} pos;
// Use this for 'dice', d1~d6 => element from the top
typedef struct dice_map {
pos d_pos;
int north;
int west;
int up;
int east;
int south;
int down;
}dice_map;
// East, West, North, South
int dR[4] = {0, 0, -1, 1};
int dC[4] = {1, -1, 0, 0};
//deque<int> instruct;
vector <int> instruct;
int N, M, K;
int map[20][20];
dice_map dice;
void swap(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
bool isRange(int x, int y) {
if (x < 0 || x >= N || y < 0 || y >= M) {
return false;
} return true;
}
void roll(int dir) {
int t_n;
// East
if (dir == 0) {
t_n = dice.east;
dice.east = dice.up;
dice.up = dice.west;
dice.west = dice.down;
dice.down = t_n;
} // West
else if (dir == 1) {
t_n = dice.west;
dice.west = dice.up;
dice.up = dice.east;
dice.east = dice.down;
dice.down = t_n;
} // North
else if (dir == 2) {
t_n = dice.north;
dice.north = dice.up;
dice.up = dice.south;
dice.south = dice.down;
dice.down = t_n;
} // South
else {
t_n = dice.south;
dice.south = dice.up;
dice.up = dice.north;
dice.north = dice.down;
dice.down = t_n;
}
}
int main() {
int t_r, t_c;
int t_d;
cin >> N >> M >> t_r >> t_c >> K;
dice.d_pos.row = t_r;
dice.d_pos.col = t_c;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin >> map[i][j];
}
}
for (int i = 0; i < K; i++) {
cin >> t_d;
instruct.push_back(t_d - 1);
}
int n_r, n_c, dir;
for (int i = 0; i < K; i++) {
dir = instruct[i];
n_r = dice.d_pos.row + dR[dir];
n_c = dice.d_pos.col + dC[dir];
if (!isRange(n_r, n_c)) continue;
// roll, and update position
roll(dir);
dice.d_pos = {n_r, n_c};
if (map[n_r][n_c] == 0) {
map[n_r][n_c] = dice.down;
}
else {
dice.down = map[n_r][n_c];
map[n_r][n_c] = 0;
}
cout << dice.up << endl;
}
return 0;
}
SW 역량테스트 준비 - [모의 SW 역량테스트] 풀이 / 코드 / 답안 (C++ / JAVA)
SW 역량테스트 준비 - C++ 코드, Java 코드
SW 역량테스트 준비 - 백준 알고리즘 문제
'Data Structures, Algorithm > SW 역량테스트' 카테고리의 다른 글
SW 역량테스트 - [백준] 연산자 끼워넣기 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
---|---|
SW 역량테스트 - [백준] 퇴사 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 시험감독 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 뱀 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
SW 역량테스트 - [백준] 2048 문제 풀이/해답/코드 (C++ / JAVA) (0) | 2020.10.15 |
Comments