<-->

시뮬레이션

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

    문제 20055번: 컨베이어 벨트 위의 로봇 길이가 N인 컨베이어 벨트가 있고, 길이가 2N인 벨트가 이 컨베이어 벨트를 위아래로 감싸며 돌고 있다. 벨트는 길이 1 간격으로 2N개의 칸으로 나뉘어져 있으며, 각 칸에는 아래 그림과 같이 1부 www.acmicpc.net 알고리즘 구현, 시뮬레이션 풀이 각 칸의 내구도를 저장할 [2][N + 1] 크기의 2차원 배열 A와 각 칸에 로봇이 있는지 저장할 [N + 1] 크기의 1차원 배열 R을 만든다. R이 1차원인 이유는 로봇에 1번 칸에서 시작해 N번 칸에 도착하면 "내린다", 즉 삭제되기 때문에 N+1 ~ 2N 칸에는 로봇에 있을 수 없기 때문이다. 반복 횟수가 K가 될 때까지 다음 과정을 반복하며 내구도가 0인 칸의 수를 센다. 1. 벨트 회전 2. ..

    [백준] 15662. 톱니바퀴 (2) (Java)

    문제 15662번: 톱니바퀴 (2) 총 8개의 톱니를 가지고 있는 톱니바퀴 T개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴 www.acmicpc.net 알고리즘 구현, 시뮬레이션 풀이 톱니바퀴가 회전했을 때 톱니바퀴의 이빨 배열의 값을 변경하는 것이 아니라 12시 방향 이빨의 index를 나타내는 변수를 만들어 관리하였다. 톱니바퀴 클래스 12시 방향부터 시계방향 순서대로 주어지므로 12시 방향 이빨의 index를 나타내는 head 값은 0이다. 이때 이 톱니바퀴를 시계 방향으로 회전한다면 12시 방향 이빨의 왼쪽에 있는 이빨이 12시 방향의 이빨이 된다. 즉 head = (head - 1 + 8..

    [프로그래머스] 프렌즈4블록 (Java)

    문제 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 알고리즘 구현, 시뮬레이션 풀이 각 블록이 지워져야할 블록인지 저장할 board와 같은 크기의 2차원 boolean형 배열을 remove를 사용한다. 지워진 블록이 없을 때까지 다음 과정을 반복한다. 1. 같은 블록 찾아서 체크 2. 체크된 칸들 '0' 으로 변경 3. 블록 밑으로 내려서 빈칸 메우기 1. 같은 블록 찾아서 체크 board를 탐색하며 (i, j) 가 0이 아니고, (i, j) (i, j+1) (i+1, j) (i+1,j+1) 가 같은 블록이라면 remove를 모두 true로 변경 remo..

    [백준] 19235. 모노미노도미노 (Java)

    문제 19235번: 모노미노도미노 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 알고리즘 구현, 시뮬레이션 풀이 20061. 모노미노도미노2 문제에서 조건이 하나 추가된 문제이다. 진한 색 보드에 가득 찬 줄이 있다면 블록을 지운 후 그 위에 있는 블록들을 지운 줄까지만 밀었지만 이번에는 그 위에 있는 블록들을 모두 맨 아래까지 떨어뜨리는 문제이다. 각 블록이 주어졌을 때 일어나는 과정은 다음과 같다. 1. 블록을 가능한 위치에 놓는다. 2. 가득찬 줄이 없을 때까지 터트린다. (여러 줄이라면 한번에) 3. 연한 색 보드에 블록이..

    [백준] 20061. 모노미노도미노2 (Java)

    문제 20061번: 모노미노도미노 2 모노미노도미노는 아래와 같이 생긴 보드에서 진행되는 게임이다. 보드는 빨간색 보드, 파란색 보드, 초록색 보드가 그림과 같이 붙어있는 형태이다. 게임에서 사용하는 좌표 (x, y)에서 x는 행, www.acmicpc.net 알고리즘 구현, 시뮬레이션 풀이 크기 [4][6]의 파란색 보드 배열과 크기 [6][4]의 초록색 보드 배열을 만들고 각 보드마다 아래 작업을 수행한다. 1. 블록 놓기 2. 가득 찬 줄이 있다면 점수 증가 후 제거하고 블록 밀기 3. 연한 색 보드에 블록이 있는 줄의 수만큼 제거하고 블록 밀기 문제에 나와있는 대로 구현만 하면 되는 문제이다. 구현을 잘못하면 결과로 시간 초과가 나올 수 있다. 블록을 밀 때 이전 위치를 0으로 바꿔주지 않았더니 ..

    [백준] 2636. 치즈 (Java)

    문제 2636번: 치즈 첫째 줄에는 사각형 모양 판의 세로와 가로의 길이가 양의 정수로 주어진다. 세로와 가로의 길이는 최대 100이다. 판의 각 가로줄의 모양이 윗 줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진 www.acmicpc.net 알고리즘 그래프, 너비우선탐색(BFS), 구현, 시뮬레이션 풀이 너비우선탐색을 통해 매 시간마다 공기와 접촉한 치즈를 녹이면 된다. 판에 가장 자리에는 치즈가 놓여 있지 않는다는 조건이 있으므로 (0, 0) 에서 너비우선탐색을 시작하여 인접한 칸이 공기라면 큐에 넣고, 치즈라면 녹인다. 이때, 치즈를 녹여서 공기로 바꾸면 다음 BFS에 영향이 가기 때문에 녹일 치즈의 좌표를 모두 저장했다가 해당 시간의 너비우선탐색이 종료되면 한번에 공기로 바꾼다. 녹인 후 남은 치..

    [백준] 23289. 온풍기 안녕! (Java)

    문제 23289번: 온풍기 안녕! 유난히 추운 날씨가 예상되는 이번 겨울을 대비하기 위해 구사과는 온풍기를 설치하려고 한다. 온풍기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기 www.acmicpc.net 알고리즘 구현, 시뮬레이션 풀이 문제에 쓰여있는 대로 집에 있는 모든 온풍기에서 바람이 한 번 나옴 온도가 조절됨 온도가 1 이상인 가장 바깥쪽 칸의 온도가 1씩 감소 초콜릿을 하나 먹는다. 조사하는 모든 칸의 온도가 K 이상이 되었는지 검사. 모든 칸의 온도가 K이상이면 테스트를 중단하고, 아니면 1부터 다시 시작한다. 다음 5가지 과정을 실행하면 된다. 0. 입력 먼저 각 칸의 온도와 벽 정보를 가진 Space 클래스를 만든다. 이때 벽을 크기 5의 bo..

    [백준] 13335. 트럭 (Java)

    문제 13335번: 트럭 입력 데이터는 표준입력을 사용한다. 입력은 두 줄로 이루어진다. 입력의 첫 번째 줄에는 세 개의 정수 n (1 ≤ n ≤ 1,000) , w (1 ≤ w ≤ 100) and L (10 ≤ L ≤ 1,000)이 주어지는데, n은 다리를 건너는 트 www.acmicpc.net 알고리즘 구현, 시뮬레이션, 큐 풀이 모든 트럭이 다리를 건널 때까지 1초씩 시뮬레이션하며 트럭이 다 건너는 시간을 출력한다. [대기 중인 트럭]과 [이동 중인 트럭]으로 나뉘어지고, 트럭은 순서대로 이동해야하므로 2개의 큐를 사용한다. 그렇다면 [대기 중인 트럭] 큐도 비어있고, [이동 중인 트럭] 큐도 비어있을 때가 모든 트럭이 다리를 건넜을 때이다. 각 초마다 다음 과정을 진행한다. 1. 다리 위의 트럭들..

    [SWEA] 5656. [모의 SW 역량테스트] 벽돌 깨기 (Java)

    문제 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 알고리즘 구현, 시뮬레이션, 백트래킹 풀이 1~W열까지 각 열에 구슬을 쏘는 경우라고 가정하여 구슬 쏘기를 진행하고, 해당 결과를 바탕으로 재귀를 돌려 1~W까지 N번 구슬을 쏘는 모든 경우를 탐색한다. 각 열마다 가장 위에 있는 벽돌의 index를 관리할 배열을 생성한다. 배열을 -1로 초기화해 벽돌이 없는 라인을 구분한다. 1~W열까지 각 열에 구슬을 쏘는 경우라고 가정하여 구슬을 쏜다. i열에 구슬 쏘기 1. 만약 i열에 벽돌이 없다면 구슬을 쏴도 의미가 없으므로 다음 열로 넘어간다. 2. i열에 벽돌이 있다면 맨 위의 벽돌을 깨고, 해당 벽돌의 정보(..

    [백준] 19236. 청소년 상어 (Java)

    문제 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 알고리즘 구현, 시뮬레이션, 백트래킹 풀이 각 칸의 물고기 번호를 저장할 2차원 배열과 물고기 번호에 해당하는 물고기들의 정보(좌표, 번호, 방향, 생존 여부)를 담을 1차원 배열을 선언한다. board = new int[4][4]; fishList = new Fish[17]; fishList 배열을 통해 각 번호의 물고기가 어디 있는지 바로 접근할 수 있다. 큰 틀은 다음과 같다. 1. (0,0) 의 물고기를 잡아먹고, [상어의 좌표, 먹..