본문 바로가기
반응형

시뮬레이션45

BOJ 16236 : 아기 상어 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/16236 아기 상어 구조체는 좌표와 몇 마리의 물고리를 먹었는지, 그리고 현재의 크기가 필요하다. typedef struct st1 { int r; int c; int eat; int size; }SHARK; SHARK babyshark; input을 받으면서 9인 경우에 아기 상어 구조체를 초기화 해주자. void input() { scanf("%d", &N); for (int r = 0; r < N; r++) { for (int c = 0; c < N; c++) { scanf("%d", &MAP[r][c]); if (MAP[r][c] == 9) { MAP[r.. 2021. 3. 6.
BOJ 16235 : 나무 재테크 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/16235 시뮬레이션 문제는 시키는대로 잘 구현하면 된다. 봄 : 나무의 나이만큼 양분 감소, 나무의 나이 1 증가, 어린 나무부터 양분 획득, 양분 부족시 사망. 여름 : 죽은 나무가 양분으로 나이 / 2 만큼 추가 가을 : 8방향 번식 나이 1의 나무가 생성 겨울 : 양분 추가 문제의 핵심은 나무가 중복될 수 있다는 것이다. 그리고 어린 나무부터 양분을 획득한다 조건에서 정렬이 필요할 것 같다. 무작정 구현했더니, time out이 나오게 되었다. /* time out */ void spring() { /* 나무를 나이 순으로 정렬 */ for (int r =.. 2021. 3. 4.
BOJ 16234 : 인구 이동 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/16234 2차원 탐색은 보통 BFS를 이용한다. 2차원 MAP 탐색 기본 원리는 단지번호붙이기를 풀어보자. 단지번호붙이기와 다른 점은, queue에 담는 조건이 인접한 A[r][c]의 차이가 L 이상 R 이하인 경우로 바뀐 것이다. 어쨌든, 조건을 만족하는 경우 queue에 담으면서 영역을 확장해 나가면 된다. 그리고 선택된 영역을 visit으로 check해서 다음 BFS에 선택되지 않도록 한다. 먼저 r, c, visit배열에 대해 BFS로 영역을 만드는 하는 함수를 만들어보자. /* 순서대로 왼쪽, 위, 오른쪽, 아래 */ int dr[] = { 0,-1,0.. 2021. 3. 2.
BOJ 5373 : 큐빙 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/5373 실제 큐브를 만들어서 직접 돌리면 된다. 시계/반시계 방향에 대해서는 아래처럼 구현하면 된다. if (clockwise == '+') { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) Cube[face][c][3 - 1 - r] = copy[face][r][c]; } else { for (int r = 0; r < 3; r++) for (int c = 0; c < 3; c++) Cube[face][3 - 1 - c][r] = copy[face][r][c]; } 실제 시험장에서 종이에 큐브를 그려가면서 .. 2021. 2. 27.
BOJ 15685 : 드래곤 커브 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/15685 방향을 먼저 모두 만들고, 시키는 대로 그리면 된다. 먼저 움직이기 위한 배열 dy, dx를 선언하자. 0: x좌표가 증가하는 방향 (→) 1: y좌표가 감소하는 방향 (↑) 2: x좌표가 감소하는 방향 (←) 3: y좌표가 증가하는 방향 (↓) int dy[] = { 0, -1, 0, 1 }; int dx[] = { 1, 0, -1, 0 }; 이제 moveList를 만들자. 드래곤 커브의 규칙대로 처음 방향이 3인 경우, moveList는 아래와 같이 만들어진다. (직접 그려보자) L = 0 : 3 L = 1 : 3 0 L = 2 : 3 0 1 0 L.. 2021. 2. 25.
BOJ 14891 : 톱니바퀴 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14891 시뮬레이션 문제는 시키는대로 구현하면 된다. 이 문제는 연속으로 회전이 발생하므로, DFS로 연속 회전 시켜보자. 먼저 rotate를 구현해보자. 톱니의 번호와 방향을 입력받으면 회전하는 함수는 아래와 같이 구현할 수 있다. 톱니바퀴 4개와 12시 방향 = 1 부터 8까지(순서대로 시계방향)의 톱니를 넣을 수 있는 2차원 배열을 선언하자. int wheel[5][10]; /* wheel[번호 1~4][각 톱니 1~8] */ void rotate(int number, int dir) { int temp; if (dir == -1) /* 반시계 방향 */ .. 2021. 2. 21.
BOJ 14503 : 로봇 청소기 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14503 로봇 청소기와 같은 시뮬레이션은, 시키는 대로 구현하면 된다. 좌표 4방향, 북, 동, 남, 서는 문제에서 아래와 같이 정의되어있다. /* 0 1 2 3 -> 북 동 남 서 */ int dr[] = { -1, 0, 1, 0 }; int dc[] = { 0, 1, 0, -1 }; 방향 전환은 배열을 이용해서 간단히 할 수 있다. int change[] = { 3, 0, 1, 2 }; 북(0)에서 왼쪽으로 회전하면 서(3), 동(1)에서 왼쪽으로 회전하면 북(0), ... 으로 4방향에 대해서만 정의해주면 되므로 복잡하게 함수를 만들거나 if/else를 사.. 2021. 2. 17.
BOJ 14499 : 주사위 굴리기 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14499 4방향으로 명령어대로 움직이면 되는 시뮬레이션 문제이다. 아래와 같은 주사위의 모양이 되도록, 6면체를 가지는 구조체 DICE를 만들자. typedef struct st { int up; int left; int top; int right; int down; int buttom; }DICE; DICE dice; /* map을 움직이는 dice는 전역으로 선언 */ 최대한 그림과 비슷하게 모양을 만들어 두면, 디버깅할 때 편하다. input 함수로 MAP과 command를 저장해두고, move 동/서/남/북을 만들자. moveEast의 경우는 아래와 같다.. 2021. 2. 15.
BOJ 3190 : 뱀 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/3190 삼성 A형은 보통 DFS/BFS 1문제, 시뮬레이션 1문제로 나온다. 첫번째 시뮬레이션 문제 뱀을 풀어보자. 뱀은 Snake 게임을 구현하면 된다. (구글에서 스네이크 게임 검색) 만들어야 함수는 다음과 같다. 1) input 함수 및 디버깅을 위한 output 함수. 2) 충돌 체크 함수. MAP을 어떻게 설계하냐에 따라 푸는 방법이 조금 달라질 수 있다. NXN 정사각 보드에서, 상하좌우 끝에 벽이 있다고 했으므로, (0, 0) 부터 (N + 1, N + 1)을 모두 벽으로 만들고, (1,1) ~ (N, N)을 보드로 덮어씌우자. 그리고 X초 뒤의 명.. 2021. 2. 14.
반응형