본문 바로가기
반응형

알고리즘/[ADV] 삼성 SW 역량 테스트 A형46

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 15686 : 치킨 배달 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/15686 input을 받을 때, 치킨집과 집의 좌표를 받아두자. void input() { scanf("%d %d", &N, &M); for (int r = 0; r < N; r++) { for (int c = 0; c < N; c++) { scanf("%d", &MAP[r][c]); if (MAP[r][c] == 1) { house[hcnt].r = r; house[hcnt++].c = c; } else if (MAP[r][c] == 2) { chicken[ccnt].r = r; chicken[ccnt++].c = c; } } } } 이제 선택할 치킨집 리스트.. 2021. 2. 25.
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 15684 : 사다리 조작 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/15684 먼저, 사다리를 구성하는 MAP 주변을 벽(3)으로 만들자. 그리고 사다리 설치는 1 → 2로 설치하자. void input() { scanf("%d %d %d", &N, &M, &H); for (int r = 0; r 새로운 2번째 사다리 설치 -> 3개 설치 -> 다음 3개 설치 ... -> 3개 설치 종료. ... 새로운 1개 설치 -> 2개 설치 -> ... -> 3개 설치 종료. ... 와 같은 방식으로 사다리를 설치하게 되고, 1개에 답이 있음에도 불구하고, 2개 설치와 3개 설치를 병행해야 한다. 따라서 DFS에 최대 몇 개까지 설치할지 정.. 2021. 2. 24.
BOJ 15683 : 감시 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/15683 먼저 모든 카메라가 방향을 가르키게 하기 위해, input에서 camera의 좌표를 따로 저장해두자. 그리고, 5번 카메라의 경우는 방향이 없으므로 따로 모은다. MAP의 경우는 모두 6으로 만든 후, (1, 1)부터 MAP을 만들자. 주변을 미리 벽으로 만들면, 경계 조건을 체크하지 않아도 되기 때문이다. void input() { scanf("%d %d", &N, &M); for (int r = 0; r 2021. 2. 24.
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 14890 : 경사로 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14890 먼저 경사로가 설치 가능한지, 1차원 배열에 대해서만 check함수를 만들고, for문을 이용해서 N번 check하자. 이때, 가로 배열, 세로 배열에 대해서 따로 check를 만들 필요 없이, MAP을 회전 시킨 후 check 하면 된다. sum = 0; for (int i = 0; i < N; i++) { sum += check(MAP[i]); sum += check(TMAP[i]); /* TMAP[c][r] == MAP[r][c] */ } 이제 경사로가 설치 가능한지 check해보자. 먼저 arr에 대해 inverse한 배열이 필요하다. for (.. 2021. 2. 20.
BOJ 14889 : 스타트와 링크 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14889 N개의 팀 중, N / 2를 선택해야 하는 조합 문제이다. 조합 문제에서는 list에 경우의 수를 저장했지만, 여기에서는 visit 배열을 이용해 선택한 팀을 1로 체크하자. 그러면 visit = 0인 팀은 저절로 다른 팀이 된다. 마지막으로 선택된 팀(start), 선택되지 않은 팀(link)에 대해 입력받은 표를 보고 점수를 계산해주면 된다. start 팀은 team 배열의 앞에, link 팀은 team[halfN] 부터 저장하자. #include #define MAX (20 + 5) int T, N, halfN; int MAP[MAX][MAX]; .. 2021. 2. 19.
BOJ 14888 : 연산자 끼워넣기 (삼성 SW TEST A형) 삼성 A형 전체 링크 www.acmicpc.net/workbook/view/1152 (A형 문제집) www.acmicpc.net/problem/14888 숫자가 N개 연산자가 N-1개가 있다. 연산자는 4종류고, 중복으로 사용이 가능한 경우다. 보통 DFS에서 visit(check, used)으로 현재의 값(여기에서는 연산자)을 사용 중인지 확인하고, DFS를 다음 단계로 보낸다. void DFS(int L) { if (/* return 조건 */) return; for (int i = 0; i < 4; i++) { if (visit[i] == 1) continue; /* 사용 중이면 패스 */ visit[i] = 1; /* 다음 dfs에서 선택하지 못하도록 표시 */ DFS(L + 1); visit[i.. 2021. 2. 19.
반응형