본문 바로가기

시뮬레이션14

[알고리즘] 뱀 (백준 3190번) 3190번: 뱀 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임 www.acmicpc.net 삼성 기출의 시뮬레이션 문제다. 지도 상에서 뱀이 움직이는 것을 구현해야 하는 문제다. Solution 1. 전역 변수 var N = 0 var K = 0 lateinit var map : Array val UP = 0 val DOWN = 1 val LEFT = 2 val RIGHT = 3 var orders : Queue = LinkedList() var snake = ArrayList() 기본 변수들과 상하좌우를 나타내는 상수, 명령들을 보관하고 있는 큐와 뱀을 표.. 2020. 10. 5.
[알고리즘] 2048 (Easy) (백준 12100번) 12100번: 2048 (Easy) 첫째 줄에 보드의 크기 N (1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 게임판의 초기 상태가 주어진다. 0은 빈 칸을 나타내며, 이외의 값은 모두 블록을 나타낸다. 블록에 쓰여 있는 수는 2 www.acmicpc.net 삼성 기출 문제인데 정말 삼성스러운 문제라고 할 수 있다. 시뮬레이션 + 브루트 포스 문제다. 이전의 다른 삼성 기출 문제들과 마찬가지로 맵에서 여러 물체를 동시에 움직이는 것을 구현해야한다. Solution 1. 전역 변수 var N = 0 lateinit var map : Array var max = 0 val UP = 0 val DOWN = 1 val LEFT = 2 val RIGHT = 3 상하좌우를 나타내는 상수들과 그 외의 .. 2020. 10. 5.
[알고리즘] 구슬 탈출 2 (백준 13460번) 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 삼성 기출 문제이다. 삼성 기출에서 자주 나오는 맵에서 물체들을 동시에 움직이는 시뮬레이션 유형이다. BFS를 활용하여서 빨간 공이 구멍에 빠지는 최단 시간을 알아내야한다. Solution 시뮬레이션 문제 중 물체를 동시에 움직이는 문제는 항상 까다롭다. 이 경우는 보드를 기울일 때 고려해야할 상황이 많다. 상하좌우로 기울일 때, 어떤 공을 먼저 움직여야 동기화가 될 지 움직이다 다른 공을 만나면 멈춰야 됨 움직이.. 2020. 10. 2.
[알고리즘] 캐슬 디펜스 (백준 17135번) 17135번: 캐슬 디펜스 첫째 줄에 격자판 행의 수 N, 열의 수 M, 궁수의 공격 거리 제한 D가 주어진다. 둘째 줄부터 N개의 줄에는 격자판의 상태가 주어진다. 0은 빈 칸, 1은 적이 있는 칸이다. www.acmicpc.net 브루트 포스 + 시뮬레이션 문제이다. 문제의 조건을 좀 헷갈리게 해놔서 조건을 잘 파악해서 어떻게 모듈화할지 생각해야 한다. Solution 1. dfs (백트랙킹 함수) public static void dfs(int index, ArrayList archers) { if(archers.size() == 3) { //시뮬레이션 int sim_map[][] = new int[N][M]; for(int i = 0;i < N;i++) sim_map[i] = map[i].clon.. 2020. 9. 28.