Today's special moments become memories of tomorrow.

BOJ/삼성 SW 역량테스트 9

[백준 20057번] 마법사 상어와 토네이도 (java)

20057번: 마법사 상어와 토네이도 마법사 상어가 토네이도를 배웠고, 오늘은 토네이도를 크기가 N×N인 격자로 나누어진 모래밭에서 연습하려고 한다. 위치 (r, c)는 격자의 r행 c열을 의미하고, A[r][c]는 (r, c)에 있는 모래의 양을 www.acmicpc.net 토네이도의 방향 순서가 서쪽 -> 남쪽 -> 동쪽 -> 북쪽 순서대로 반복된다. direct 3차원 배열을 만들어서, - 첫 번째 인덱스는 방향(0: 서쪽, 1:남쪽, 2:동쪽, 3:북쪽)을 의미하고, - 두 번째 인덱스는 0일 경우 r 좌표(행 좌표), 1일 경우 c 좌표(열 좌표)를 나타내었다. - 세 번째 인덱스는 현재 위치를 기준으로 1%비율에 해당하는 위치, 2%에 해당하는 위치, 5%에 해당하는 위치, 7%에 해당하는 위..

[백준 20055번] 컨베이어 벨트 위의 로봇 (java)

20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net int[] A = new int[2*N+1] : 칸 별로 내구도를 의미 int[][] num = new int[2][N+1] : 각 위치에 무슨 번호의 칸이 있는지를 의미 컨테이너 벨트의 가장 왼쪽 위가 [0][1], 가장 오른쪽 위가 [0][N], 가장 왼쪽 아래가 [1][1], 가장 오른쪽 아래가 [1][N] 위치를 의미한다. 처음에는 num[0][1] = 1번 칸, num[0][2] = 2번 칸, ... num[0][N]= N번 칸 ....

[백준 19237번] 어른 상어 (java)

19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net int[][] resttime = new int[N+1][N+1] : 각 칸마다 냄새가 없어지기까지 남은 시간 int[][] smell = new int[N+1][N+1] : 각 칸에의 냄새를 뿌린 상어의 번호(냄새가 없으면 0) int[][][] priority = new int[M+1][5][4] : 상어마다 현재 방향에서의 우선순위 ex) priority[m][1][0] : m번 상어의 현재 방향이 위쪽방향(1)일..

[백준 20061번] 모노미노도미노 2 (java)

20061번: 모노미노도미노 2 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 초록색 블럭과 파란색 블럭을 각각 boolean형의 2차원 배열로 생성한다. (i, j)칸에 블럭이 있으면 true, 블럭이 없으면 false가 들어간다. boolean[][] blue = new boolean[4][6]; boolean[][] green = new boolean[6][4]; 이 문제에서 크게 3가지 동작으로 나누었다. 1. 새로운 블럭 쌓기 : stack(int t, int x, int y) 2. 한 행(혹은 열)에 블럭이 다 차면, ..

[백준 17822번] 원판 돌리기 (java)

17822번: 원판 돌리기 반지름이 1, 2, ..., N인 원판이 크기가 작아지는 순으로 바닥에 놓여있고, 원판의 중심은 모두 같다. 원판의 반지름이 i이면, 그 원판을 i번째 원판이라고 한다. 각각의 원판에는 M개의 정수가 적혀 www.acmicpc.net 몇번째 원판인지, 해당 원판에 어떤 숫자가 있는지를 2차원 배열을 만들어서 저장한다. int[][] circle = new int[N+1][M+1]; x, d, k를 저장하는 Command 클래스를 만들고, T번마다 x, d, k 값이 다르므로 크기가 T인 배열을 생성한다. Command[] cmd = new Command[T]; 먼저, T번 반복하기 위한 반복문이 필요하다. 매번 cmd 배열에서 변수 x, d, k를 꺼내고, d가 0일 때(시계방..

[백준 17837번] 새로운 게임 2 (java)

17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하 www.acmicpc.net 다른 삼성역량테스트 문제에 비해 쉬운 편이었으나, 문제를 잘못 이해해서 몇시간을 삽질했다. 이동하려는 위치가 파란색이면, 방향을 바꾸고 반대편으로 이동해야 한다. 이 때, 반대편이 파란색이라면 이동하지 않는다. 여기까지는 제대로 이해했는데, 만약 반대편이 흰색이나 빨간색이면 A번 말 혼자만 이동하는 것이 아니라 A번 위에 있던 말들까지 같이 이동해야 한다. 하지만 문제에는 이 부분에 대해서는 설명이 생략되어 있어서 나는 계속 A번 말 혼자서만 이동시켰다. 이 ..

[백준 5373번] 큐빙 (java)

5373번: 큐빙 각 테스트 케이스에 대해서 큐브를 모두 돌린 후의 윗 면의 색상을 출력한다. 첫 번째 줄에는 뒷 면과 접하는 칸의 색을 출력하고, 두 번째, 세 번째 줄은 순서대로 출력하면 된다. 흰색은 w, 노란 www.acmicpc.net 앞 면, 뒷 면, 왼쪽 면, 오른쪽 면, 윗 면, 아랫 면 6가지 경우의 수와 시계 방향으로 돌릴 때, 반시계 방향으로 돌릴 때 이렇게 2가지 경우 총 12가지의 경우의 수를 구해서 푸는 문제이다. 문제 자체는 어렵지 않으나, 모든 경우의 수를 다 생각해야 하기 때문에 코드도 길어지고 반례 찾는것도 힘들었다. 나는 cube 3차원 배열을 만들어서 첫번째는 어떤 면인지를 의미하고, 해당 면에서 3x3의 수를 넣어주었다. char[][][] cube = new cha..

색종이 붙이기

백준 17136번 : 색종이 붙이기(삼성 SW 역량 테스트) 17136번: 색종이 붙이기 과 같이 정사각형 모양을 한 다섯 종류의 색종이가 있다. 색종이의 크기는 1×1, 2×2, 3×3, 4×4, 5×5로 총 다섯 종류가 있으며, 각 종류의 색종이는 5개씩 가지고 있다. 색종이를 크 www.acmicpc.net 그리디 + 백트래킹으로 해결할 수 있는 문제 나는 재귀를 이용하여 문제를 풀었다. 배열을 돌면서 큰 색종이부터 붙일 수 있는지 확인한다.(그리드 방식) 현재 위치에서 5x5 크기의 색종이를 붙일 수 있으면 붙인다. 다음 위치로 이동해서, 5x5 크기의 색종이를 붙일 수 있으면 붙인다. ... 배열의 마지막 위치로 이동해서 5x5 크기의 색종이를 붙일 수 있으면 붙인다. 마지막 위치에서 색종이 크..

[백준 13460번] 구슬 탈출 2 (java)

사용한 방법 : BFS 빨간 구슬의 위치를 넣는 큐와 파란 구슬의 위치를 넣는 큐 이렇게 두 개의 큐를 생성한다. 각각의 큐에는 기울이기를 통해 움직이고 난 후의 빨간구슬의 위치와 파란구슬의 위치 정보가 들어있다. Queue redque = new LinkedList(); Queue blueque = new LinkedList(); Pos 클래스는 구슬의 위치(n, m)과 구슬이 해당 위치에 도달했을 때 총 움직인 횟수 move 가 들어간다. static class Pos { int n, m, move; Pos(int n, int m, int move) { this.n = n; this.m = m; this.move = move; } } 한 번 기울이면 구슬은 장애물(벽 혹은 다른 구슬)에 부딪힐 때까지..