시뮬레이션 65

백준 19237번 어른 상어

문제 링크입니다: https://www.acmicpc.net/problem/19237 19237번: 어른 상어 첫 줄에는 N, M, k가 주어진다. (2 ≤ N ≤ 20, 2 ≤ M ≤ N2, 1 ≤ k ≤ 1,000) 그 다음 줄부터 N개의 줄에 걸쳐 격자의 모습이 주어진다. 0은 빈칸이고, 0이 아닌 수 x는 x번 상어가 들어있는 칸을 의미 www.acmicpc.net 겉보기에는 복잡해보이지만 다차원 배열을 활용하면 생각보다 간단한 문제였습니다. 알고리즘은 아래와 같습니다. 1. 입력을 모두 받고 각 상어의 방향마다의 우선순위를 입력받기 위해 삼차원 배열을 다음과 같이 선언해줍니다. [상어 번호][현재 방향][현재 방향에 따른 우선순위 방향] 2. 이동을 하는데 상어가 동시에 이동하므로 냄새와 이동한..

알고리즘/BOJ 2020.06.25

백준 17472번 다리 만들기 2

문제 링크입니다: https://www.acmicpc.net/problem/17472 17472번: 다리 만들기 2 첫째 줄에 지도의 세로 크기 N과 가로 크기 M이 주어진다. 둘째 줄부터 N개의 줄에 지도의 정보가 주어진다. 각 줄은 M개의 수로 이루어져 있으며, 수는 0 또는 1이다. 0은 바다, 1은 땅을 의미한다. www.acmicpc.net 다리의 방향도 고려해야하기 때문에 생각보다 까다로운 시뮬레이션 문제였습니다. 코드를 깔끔하게 짠다고 노력했는데도 불구하고 상당히 지저분하기 때문에 주석을 최대한 꼼꼼하게 달았습니다. 알고리즘은 아래와 같습니다. 1. 섬으로 표기된 지역 즉, 1로 표시된 좌표를 모두 islands 벡터에 추가해줍니다. 2. islands 벡터에 있는 좌표를 순차적으로 확인하며..

알고리즘/BOJ 2020.06.17

백준 17471번 게리맨더링

문제 링크입니다: https://www.acmicpc.net/problem/17471 17471번: 게리맨더링 선거구를 [1, 4], [2, 3, 5, 6]으로 나누면 각 선거구의 인구는 9, 8이 된다. 인구 차이는 1이고, 이 값보다 더 작은 값으로 선거구를 나눌 수는 없다. www.acmicpc.net N이 최대 10이고 팀을 구역별로 할당할 수 있는 선거구의 수는 최소 1개이기 때문에 최대 8 * 10! 의 경우의 수를 고려하면 되는 문제였습니다. (사실, 구역을 2분할하기 때문에 10! 보다 훨씬 적은 경우의 수를 고려합니다.) 같은 구역으로 할당된 선거구가 모두 연결되었는지 판단하기 위해 algorithm 헤더의 find 함수를 사용했으며 코드가 비교적 간단하기 때문에 나머지 설명은 생략하겠습..

알고리즘/BOJ 2020.06.16

백준 17406번 배열 돌리기 4

문제 링크입니다: https://www.acmicpc.net/problem/17406 17406번: 배열 돌리기 4 크기가 N×M 크기인 배열 A가 있을때, 배열 A의 값은 각 행에 있는 모든 수의 합 중 최솟값을 의미한다. 배열 A가 아래와 같은 경우 1행의 합은 6, 2행의 합은 4, 3행의 합은 15이다. 따라서, 배열 A의 www.acmicpc.net 난이도가 쉬운 시뮬레이션 문제였습니다. State 구조체를 선언하여 회전 연산의 정보를 저장하였고, 각 연산 정보에 인덱스를 부여하여 next_permutation을 사용하여 모든 경우의 수를 시뮬레이션 돌렸습니다. 각 인덱스에 담긴 정보는 map 자료구조를 사용하여 인덱스를 key, 연산 정보를 value로 저장하였고, 회전 연산은 이중 for문을..

알고리즘/BOJ 2020.06.15

백준 19236번 청소년 상어

문제 링크입니다: https://www.acmicpc.net/problem/19236 19236번: 청소년 상어 첫째 줄부터 4개의 줄에 각 칸의 들어있는 물고기의 정보가 1번 행부터 순서대로 주어진다. 물고기의 정보는 두 정수 ai, bi로 이루어져 있고, ai는 물고기의 번호, bi는 방향을 의미한다. 방향 bi는 www.acmicpc.net 쉬운 시뮬레이션 문제였습니다. 알고리즘은 아래와 같습니다. 1. Fish 구조체를 선언한 뒤 fishes 배열에 물고기 번호, 방향, 좌표를 입력합니다. 1.1 이 때, {0, 0} 좌표에 있는 물고기는 입력받지 않고 바로 상어로 변경해줍니다. 2. fishTank 배열 같은 경우 좌표를 통해 물고기 번호를 구하기 위해 선언한 배열입니다. 3. func 재귀함수..

알고리즘/BOJ 2020.06.15

백준 19235번 모노미노도미노

문제 링크입니다: https://www.acmicpc.net/problem/19235 언제나처럼 삼성 코딩테스트는 수준 높은 독해력을 요구하는 시뮬레이션 문제를 출제하는 것 같습니다. 저는 초록색 칸과 파란색 칸을 각각 이차원 배열 green[6][4], blue[4][6]으로 선언하여 문제를 풀었습니다. 알고리즘은 아래와 같습니다. 1. 블록 타입과 좌표를 입력 받고 green과 blue 배열에 블록이 쌓인 칸을 표시해줍니다. 1.1 이 때, 타입마다 다르게 표시해줘야 합니다. ex) t=2 일 경우 배열에도 2라고 표시 2. 초록색 칸과 파란색 칸에 대해 시뮬레이션을 돌립니다. 2.1 초록색 칸에서 행, 파란색 칸에서 열이 가득 채워질 경우 블록을 만나거나 경계선에 맞닿을 때까지 옮겨주는 작업을 진행..

알고리즘/BOJ 2020.06.12

백준 17281번 야구공

문제 링크입니다: https://www.acmicpc.net/problem/17281 17281번: ⚾ ⚾는 9명으로 이루어진 두 팀이 공격과 수비를 번갈아 하는 게임이다. 하나의 이닝은 공격과 수비로 이루어져 있고, 총 N이닝 동안 게임을 진행해야 한다. 한 이닝에 3아웃이 발생하면 이닝이 종� www.acmicpc.net 가장 많은 득점을 하는 타순을 찾기 위해 1번 선수부터 9번 선수까지의 모든 순열에 대해 시뮬레이션을 돌려야하는 문제였습니다. 문제 조건으로 1번 선수가 4번 타자가 되어야 하기 때문에 순열의 네 번째 인덱스가 0인지 확인한 뒤 시뮬레이션을 돌렸습니다. (v[0] == 3) 타순은 이닝이 변경되어도 순서를 유지해야하기 때문에 덱을 사용하여 현재 타석에 선 타자를 push_back 메..

알고리즘/BOJ 2020.06.04

백준 3987번 보이저 1호

문제 링크입니다: https://www.acmicpc.net/problem/3987 3987번: 보이저 1호 문제 보이저 1호는 1977년에 발사된 NASA의 태양계 무인 탐사선이다. 현재 보이저 1호는 태양권덮개 (헬리오시스)에 있다. 보이저 1호와 같이 오랜 기간동안 활동하는 탐사선은 경로를 항성계를 만� www.acmicpc.net 행성에 의해 반사되는 방향을 미리 매핑해 놓으면 풀기 수월한 문제였습니다. visited 배열을 이차원이 아닌 방향까지 고려하여 삼차원 배열로 선언하는 것이 핵심이였습니다! 개발환경:Visual Studio 2019 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

알고리즘/BOJ 2020.06.03

백준 18808번 스티커 붙이기

문제 링크입니다: https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연� www.acmicpc.net 90도 회전을 시켰을 경우 R과 C 값이 바뀌는 부분만 적절히 처리한다면 쉽게 해결할 수 있는 문제였습니다. 저 같은 경우에는 cnt의 값에 따라 모듈러 연산을 통해 R과 C 값을 스왑하는 식으로 해결했습니다. 개발환경:Visual Studio 2017 지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

알고리즘/BOJ 2020.06.02

백준 17837번 새로운 게임 2

문제 링크입니다: https://www.acmicpc.net/problem/17837 17837번: 새로운 게임 2 재현이는 주변을 살펴보던 중 체스판과 말을 이용해서 새로운 게임을 만들기로 했다. 새로운 게임은 크기가 N×N인 체스판에서 진행되고, 사용하는 말의 개수는 K개이다. 말은 원판모양이고, 하� www.acmicpc.net 저번 문제와 마찬가지로 문제에 주어진대로 그대로 코드를 작성하면 되는 문제였습니다. 주어진 조건 1 ~ 4번 중에 1, 2번 그리고 3, 4번이 각각 유사한 성격을 지녔기 때문에 묶어서 처리했습니다. 범위를 벗어나는 부분과 파란색 칸은 완전 똑같기 때문에 바로 예외처리를 해줬고 하얀색 칸과 빨간색 칸 같은 경우 뒤집는 파트를 제외하면 동일했기 때문에 뒤집는 파트만 조건문을 ..

알고리즘/BOJ 2020.05.27