혼자 정리
14496번: 주사위 굴리기 본문
C++ 처음 작성
#include <iostream>
using namespace std;
int N, M, x, y, K;
int map[20][20];
int dice[7];
void go_east()
{
if (y + 1 >= M)
return ;
y += 1;
int tmp;
tmp = dice[4];
dice[4] = dice[6];
dice[6] = dice[3];
dice[3] = dice[1];
dice[1] = tmp;
if (map[x][y] == 0) {
map[x][y] = dice[6];
}
else {
dice[6] = map[x][y];
map[x][y] = 0;
}
cout << dice[1] << "\n";
}
void go_west()
{
if (y - 1 <= -1)
return ;
y -= 1;
int tmp;
tmp = dice[4];
dice[4] = dice[1];
dice[1] = dice[3];
dice[3] = dice[6];
dice[6] = tmp;
if (map[x][y] == 0) {
map[x][y] = dice[6];
}
else {
dice[6] = map[x][y];
map[x][y] = 0;
}
cout << dice[1] << "\n";
}
void go_south()
{
if (x + 1 >= N)
return ;
x += 1;
int tmp;
tmp = dice[5];
dice[5] = dice[1];
dice[1] = dice[2];
dice[2] = dice[6];
dice[6] = tmp;
if (map[x][y] == 0) {
map[x][y] = dice[6];
}
else {
dice[6] = map[x][y];
map[x][y] = 0;
}
cout << dice[1] << "\n";
}
void go_north()
{
if (x - 1 <= -1)
return ;
x -= 1;
int tmp;
tmp = dice[5];
dice[5] = dice[6];
dice[6] = dice[2];
dice[2] = dice[1];
dice[1] = tmp;
if (map[x][y] == 0) {
map[x][y] = dice[6];
}
else {
dice[6] = map[x][y];
map[x][y] = 0;
}
cout << dice[1] << "\n";
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> x >> y >> K;
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++) {
int ins;
cin >> ins;
if (ins == 1)
go_east();
else if (ins == 2)
go_west();
else if (ins == 3)
go_north();
else if (ins == 4)
go_south();
}
}
Python
import sys
input = sys.stdin.readline
N, M, x, y, K = map(int, input().split())
mymap = [0 for i in range(N)]
for i in range(N):
mymap[i] = list(map(int, input().split()))
dy = [+1, -1, 0, 0]
dx = [0, 0, -1, +1]
dice = [0 for _ in range(7)]
ins = list(map(int, input().split()))
for i in range(K):
nx = x + dx[ins[i] - 1]
ny = y + dy[ins[i] - 1]
if nx >= N or nx < 0 or ny >= M or ny < 0:
continue
if ins[i] == 1:
tmp = dice[4]
dice[4] = dice[6]
dice[6] = dice[3]
dice[3] = dice[1]
dice[1] = tmp
elif ins[i] == 2:
tmp = dice[4]
dice[4] = dice[1]
dice[1] = dice[3]
dice[3] = dice[6]
dice[6] = tmp
elif ins[i] == 3:
tmp = dice[5]
dice[5] = dice[6]
dice[6] = dice[2]
dice[2] = dice[1]
dice[1] = tmp
elif ins[i] == 4:
tmp = dice[5]
dice[5] = dice[1]
dice[1] = dice[2]
dice[2] = dice[6]
dice[6] = tmp
if mymap[nx][ny] == 0:
mymap[nx][ny] = dice[6]
else:
dice[6] = mymap[nx][ny]
mymap[nx][ny] = 0
print(dice[1])
x = nx
y = ny
C++ 수정
#include <iostream>
using namespace std;
int N, M, x, y, K;
int map[20][20];
int dice[7];
int dy[4] = {+1, -1, 0, 0};
int dx[4] = {0, 0, -1, +1};
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> N >> M >> x >> y >> K;
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++) {
int ins;
cin >> ins;
int nx = x + dx[ins - 1];
int ny = y + dy[ins - 1];
if (nx >= N || nx < 0 || ny >= M || ny < 0)
continue ;
if (ins == 1) {
int tmp = dice[4];
dice[4] = dice[6];
dice[6] = dice[3];
dice[3] = dice[1];
dice[1] = tmp;
}
else if (ins == 2) {
int tmp = dice[4];
dice[4] = dice[1];
dice[1] = dice[3];
dice[3] = dice[6];
dice[6] = tmp;
}
else if (ins == 3) {
int tmp = dice[5];
dice[5] = dice[6];
dice[6] = dice[2];
dice[2] = dice[1];
dice[1] = tmp;
}
else if (ins == 4) {
int tmp = dice[5];
dice[5] = dice[1];
dice[1] = dice[2];
dice[2] = dice[6];
dice[6] = tmp;
}
if (map[nx][ny] == 0) {
map[nx][ny] = dice[6];
} else {
dice[6] = map[nx][ny];
map[nx][ny] = 0;
}
cout << dice[1] << "\n";
x = nx, y = ny;
}
}
- 무난한 시뮬레이션 유형이었다
- 동서남북 이동하는 문제일 때
dx[4]
,dy[4]
이용하기 - map을 통해 변수 여러 개에 할당
- map을 list에 할당하고 싶은 경우 map()은 iterator를 반환하므로 list()로 변환이 필요
- 처음에 변수명 map을 2차원 배열로 쓰려 했으나 오류 발생. 아마 map함수명과 겹쳐서 그런 것 같다. my_등을 붙여주자.
'알고리즘 문풀 > 백준' 카테고리의 다른 글
14500: 테트로미노 (0) | 2021.08.04 |
---|---|
13458: 시험 감독 (0) | 2021.08.04 |
11726번: 2×n 타일링 (0) | 2021.07.19 |
9095번: 1, 2, 3 더하기 (0) | 2021.07.18 |
17626번: Four Squares (0) | 2021.07.17 |