목록문제 풀이/Simulation (22)
코린이 탈출기
문제 바로가기 15684번: 사다리 조작 사다리 게임은 N개의 세로선과 M개의 가로선으로 이루어져 있다. 인접한 세로선 사이에는 가로선을 놓을 수 있는데, 각각의 세로선마다 가로선을 놓을 수 있는 위치의 개수는 H이고, 모든 세로선 www.acmicpc.net 위의 그림과 같은 사다리가 주어졌을 때, i번째 선이 i번째로 나오게 하는 최소한의 사다리 개수를 출력하는 문제이다. 사다리를 0개부터 3개까지 놓을 수 있기 때문에 사다리를 늘려가면서 놓을 수 있는 모든 경우의 수를 계산해야한다. 사다리를 놓는 부분은 백트래킹으로 구현하였다. solve() 함수 내에서 for (int i = 1; i a >> b; ladder[a][b] = 1; } N--; for (int i = 0; i
문제 바로가기 14500번: 테트로미노 폴리오미노란 크기가 1×1인 정사각형을 여러 개 이어서 붙인 도형이며, 다음과 같은 조건을 만족해야 한다. 정사각형은 서로 겹치면 안 된다. 도형은 모두 연결되어 있어야 한다. 정사각형의 변� www.acmicpc.net 테트로미노를 이루는 도형들의 좌표를 tetromino 배열에 넣어서 완전탐색으로 구현하였다. 처음에는 5개의 테트로미노만 배열에 넣고 회전이나 대칭시키는 것을 for문 내에서 하려고 했는데, 코드가 너무 어려워질 것 같아서 회전, 대칭 시켰을 때 모양이 겹치지 않는 19개의 테트로미노를 직접 구했다. 이 19개의 좌표를 모두 넣는 것이 상당한 노가다,, 좌표 넣으면서 실수해서 푸는 데 시간이 좀 걸렸다. 코드 내에 for문이 무려 4중 포문이였지만..
문제 바로가기 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도 www.acmicpc.net 문제 이해만 제대로 하면 쉽게 구현이 가능한 문제이다. 특별한 알고리즘이 필요없다! 주사위를 동, 서, 남, 북으로 굴릴 때 주사위의 번호 위치가 어떻게 바뀌는지만 생각해주면 된다. change_dice 함수에서 주사위의 번호를 바꾸는 구현을 했다. #include #include #include using namespace std; int N, M, K; int arr[20][20]..
문제 바로가기 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사 www.acmicpc.net 까다로운 문제였다 푸는 데 두시간 걸림 ㅜㅅㅜ 노잼.... #include #include #include #include using namespace std; int R, C, T; int map[50][50]; int new_map[50][50]; int dir[50][50]; int pos[4][2] = { {1,0},{-1,0},{0,1},{0,-1} }; //아래, 위, 오, 왼 int dust_cnt; vector clean; //0: ..
문제 바로가기 15685번: 드래곤 커브 첫째 줄에 드래곤 커브의 개수 N(1 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에는 드래곤 커브의 정보가 주어진다. 드래곤 커브의 정보는 네 정수 x, y, d, g로 이루어져 있다. x와 y는 드래곤 커� www.acmicpc.net 엄청 재밌는 문제였다. 읽고 문제 이해하는 데 한참 걸렸는데 규칙을 찾으니까 신기했다. 세대가 하나 증가할 때마다 그 전 세대의 벡터의 방향들을 하나씩 증가시켜서 거꾸로 저장하면 된다. 벡터의 방향을 모두 저장해두고 벡터의 size 만큼 반복하면서 현재 위치에서 저장된 방향으로 이동시킨다. 정사각형을 만드는 지 확인해야하니까 이동시키면서 각 위치는 map이라는 2차원 배열에 저장해두었다. 그리고 마지막으로, 정사각형을 만..
문제 바로가기 14890번: 경사로 첫째 줄에 N (2 ≤ N ≤ 100)과 L (1 ≤ L ≤ N)이 주어진다. 둘째 줄부터 N개의 줄에 지도가 주어진다. 각 칸의 높이는 10보다 작거나 같은 자연수이다. www.acmicpc.net 이 문제 역시 삼성 역량테스트 기출 문제이다. 크게 어렵지는 않았지만 처음 생각해낸 것보다 더 간단하게 풀 수 있었다. 가로줄 N번, 세로줄 N번을 봐줘야 하기 때문에 이를 함수로 구현해도 깔끔하게 안되고.. 어떻게 하면 좋을까 고민하다가 결국 가로줄, 세로줄 함수를 따로 두 개를 만들어서 풀었는데 그렇게 할 필요가 없었다. 세로줄 부분을 복사해서 가로줄 밑에다가 넣어주고 2*N번만큼 가로줄을 확인해주면 되는 것이었다 !!! 세상엔 똑똑한 사람들이 참 많구나.. 그리고 L..