시뮬레이션 68

백준 17144번 미세먼지 안녕!

문제 링크입니다: https://www.acmicpc.net/problem/17144 17144번: 미세먼지 안녕! 미세먼지를 제거하기 위해 구사과는 공기청정기를 설치하려고 한다. 공기청정기의 성능을 테스트하기 위해 구사과는 집을 크기가 R×C인 격자판으로 나타냈고, 1×1 크기의 칸으로 나눴다. 구사과는 뛰어난 코딩 실력을 이용해 각 칸 (r, c)에 있는 미세먼지의 양을 실시간으로 모니터링하는 시스템을 개발했다. (r, c)는 r행 c열을 의미한다. 공기청정기는 항상 왼쪽 열에 설치되어 있고, 크기는 두 행을 차지한다. 공기청정기가 설치되어 있지 않은 칸에는 미세먼 www.acmicpc.net 미세먼지의 확산이 동시다발적으로 일어나기 때문에 배열을 복사해야하는 점이 귀찮았지만 재밌는 문제였습니다. 알..

알고리즘/BOJ 2019.05.09

백준 3190번 뱀

문제 링크입니다: https://www.acmicpc.net/problem/3190 3190번: 뱀 문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임은 NxN 정사각 보드위에서 진행되고, 몇몇 칸에는 사과가 놓여져 있다. 보드의 상하좌우 끝에 벽이 있다. 게임이 시작할때 뱀은 맨위 맨좌측에 위치하고 뱀의 길이는 1 이다. 뱀은 처음에 오른쪽을 향한다. 뱀은 매 초마다 이동을 하는데 다음과 같은 규칙을 따 www.acmicpc.net 재밌는 시뮬레이션 문제였습니다. 뱀의 머리와 꼬리의 좌표를 모두 파악해야하기 때문에 양방향에서 삽입, 삭제가 가능한 덱을 이용..

알고리즘/BOJ 2019.05.01

백준 14499번 주사위 굴리기

문제 링크입니다: https://www.acmicpc.net/problem/14499 14499번: 주사위 굴리기 첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마 www.acmicpc.net 어느 정도의 공간지각능력을 요구하는 문제였습니다. 주사위를 돌리면 해당 면이 어느 위치에 가는지를 잘 파악하고..

알고리즘/BOJ 2019.04.30

백준 5373번 큐빙

문제 링크입니다: https://www.acmicpc.net/problem/5373 5373번: 큐빙 문제 루빅스 큐브는 삼차원 퍼즐이다. 보통 루빅스 큐브는 3×3×3개의 작은 정육면체로 이루어져 있다. 퍼즐을 풀려면 각 면에 있는 아홉 개의 작은 정육면체의 색이 동일해야 한다. 큐브는 각 면을 양방향으로 90도 만큼 돌릴 수 있도록 만들어져 있다. 회전이 마친 이후에는, 다른 면을 돌릴 수 있다. 이렇게 큐브의 서로 다른 면을 돌리다 보면, 색을 섞을 수 있다. 이 문제에서는 루빅스 큐브가 모두 풀린 상태에서 시작한다. 윗 면은 흰색, 아랫 면은 노란 www.acmicpc.net 단순 시뮬레이션 문제지만 접근 방법을 잘 생각하고 풀어야하는 문제였습니다. 저는 접근방법을 레바스님(https://reba..

알고리즘/BOJ 2019.04.29

백준 14503번 로봇 청소기

문제 링크입니다: https://www.acmicpc.net/problem/14503 14503번: 로봇 청소기 로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어져 있다. 각각의 칸은 벽 또는 빈 칸이다. 청소기는 바라보는 방향이 있으며, 이 방향은 동, 서, 남, 북중 하나이다. 지도의 각 칸은 (r, c)로 나타낼 수 있고, r은 북쪽으로부터 떨어진 칸의 개수, c는 서쪽으로 부터 떨어진 칸의 개수이다. 로봇 청소기는 다음 www.acmicpc.net 흥미로운 문제였습니다. 핵심은 네 방향 다 청소할 곳이 없을 때 이미 청소한 곳이여도 돌아올 수 있다는 것이였습..

알고리즘/BOJ 2019.04.28

백준 15662번 톱니바퀴(2)

문제 링크입니다: https://www.acmicpc.net/problem/15662 15662번: 톱니바퀴 (2) 총 8개의 톱니를 가지고 있는 톱니바퀴 T개가 아래 그림과 같이 일렬로 놓여져 있다. 또, 톱니는 N극 또는 S극 중 하나를 나타내고 있다. 톱니바퀴에는 번호가 매겨져 있는데, 가장 왼쪽 톱니바퀴가 1번, 그 오른쪽은 2번, ..., 가장 오른쪽 톱니바퀴는 T번이다. 아래 그림은 T가 4인 경우이다. 이때, 톱니바퀴를 총 K번 회전시키려고 한다. 톱니바퀴의 회전은 한 칸을 기준으로 한다. 회전은 시계 방향과 반시계 방향이 있고, 아래 그림과 같이 회전한다 www.acmicpc.net 최근에 비슷한 문제를 푼 적이 있어서 쉽게 풀 수 있었던 문제였습니다. 회전시킬 톱니바퀴를 회전시키지 않은 ..

알고리즘/BOJ 2019.04.27

백준 16235번 나무 재테크

문제 링크입니다: https://www.acmicpc.net/problem/16235 16235번: 나무 재테크 부동산 투자로 억대의 돈을 번 상도는 최근 N×N 크기의 땅을 구매했다. 상도는 손쉬운 땅 관리를 위해 땅을 1×1 크기의 칸으로 나누어 놓았다. 각각의 칸은 (r, c)로 나타내며, r은 가장 위에서부터 떨어진 칸의 개수, c는 가장 왼쪽으로부터 떨어진 칸의 개수이다. r과 c는 1부터 시작한다. 상도는 전자통신공학과 출신답게 땅의 양분을 조사하는 로봇 S2D2를 만들었다. S2D2는 1×1 크기의 칸에 들어있는 양분을 조사해 상도에게 전송하고, 모든 www.acmicpc.net 같은 학교 학우들이 삼성 코딩 테스트를 보는 날이라 저도 한번 풀어봤습니다. 간단한 시뮬레이션 문제였습니다. 봄,..

알고리즘/BOJ 2019.04.14

백준 14891번 톱니바퀴

문제 링크입니다: https://www.acmicpc.net/problem/14891 동기의 요청으로 풀어본 문제인데 꽤나 재밌는 문제였습니다.저는 덱을 이용하여 시뮬레이션을 돌려 풀었는데 조세퍼스 문제처럼 인덱스를 모듈러 연산을 하며 풀어도 될 법한 문제였습니다. #include #include #include #include #include using namespace std; int main(void) { ios_base::sync_with_stdio(0); cin.tie(0); deque dq[5]; for (int i = 1; i > s; for(int j=0; j> K; for (int i = 0; i < K; i++) { int num, dir..

알고리즘/BOJ 2019.03.09

백준 2138번 전구와 스위치

문제 링크입니다: https://www.acmicpc.net/problem/2138 재미있는 그리디 문제였습니다.N은 최대 100,000이기 때문에 단순 재귀 호출을 통해 풀려고 한다면 메모리초과가 발생합니다.따라서, 그리디하게 접근해야합니다. 알고리즘은 아래와 같습니다.1. 0번째 스위치를 누르지 않고 시작하는 경우와 0번째 스위치를 누르고 시작하는 경우로 나눕니다.2. 모든 경우를 재귀 호출하는 경우 메모리 초과가 나기 때문에 보고 있는 인덱스 직전의 전구 상태를 봅니다.- 인덱스를 한번 지나가면 다시 돌아오지 않기 때문에 확인하고 있는 (인덱스 - 1)에 위치한 전구의 상태를 보고 누를지 말지 결정합니다.a) (인덱스 - 1)에 위치한 전구의 상태와 만들고자하는 배열의 (인덱스 - 1)에 위치한 전..

알고리즘/BOJ 2018.11.01