c++(12)
-
백준 구슬 탈출 2 C++
문제 스타트링크에서 판매하는 어린이용 장난감 중에서 가장 인기가 많은 제품은 구슬 탈출이다. 구슬 탈출은 직사각형 보드에 빨간 구슬과 파란 구슬을 하나씩 넣은 다음, 빨간 구슬을 구멍을 통해 빼내는 게임이다. 보드의 세로 크기는 N, 가로 크기는 M이고, 편의상 1×1크기의 칸으로 나누어져 있다. 가장 바깥 행과 열은 모두 막혀져 있고, 보드에는 구멍이 하나 있다. 빨간 구슬과 파란 구슬의 크기는 보드에서 1×1크기의 칸을 가득 채우는 사이즈이고, 각각 하나씩 들어가 있다. 게임의 목표는 빨간 구슬을 구멍을 통해서 빼내는 것이다. 이때, 파란 구슬이 구멍에 들어가면 안 된다. 이때, 구슬을 손으로 건드릴 수는 없고, 중력을 이용해서 이리 저리 굴려야 한다. 왼쪽으로 기울이기, 오른쪽으로 기울이기, 위쪽으..
2023.08.04 -
백준 17142 연구소 3
문제 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 승원이는 연구소의 바이러스 M개를 활성 상태로 변경하려고 한다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽, 바이러스로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 활성 바이러스가 비활성 바이러스가 있는 칸으로 가면 비활성 바이러스가 활성으로 변한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 0은 빈 칸, 1은 벽, 2..
2023.08.03 -
백준 3190 뱀 c++
해당 문제는 구현문제이다. 몇가지 어려움이 있었다. 1. 테스트케이스 3번 테스트케이스 2번과 테스트케이스 3번이 다른 답을 내는 것은 뱀은 몸을 먼저 늘린 후에 방향 전환을 하기 때문이다. 13초에 뱀이 머리를 늘리면 꼬리와 닿게 되기 때문에 13초에 끝나게 된다. 2. 방향 전환 배열 선언 방향 전환하는 배열을 static하게 dir[101] 이런식으로 세웠었다. 하지만 시간이 101만큼 들어오지 않고 n*n 행렬이라고 할 때 여러번 순환을 한다고 하면 n*n*n .. 으로 계속 들어올 수 있고 이는 세그멘테이션 폴트를 야기할 수 있다. 따라서 map을 사용했다. vector을 사용할 수 있지만 time n 에 대해 방향 전환을 하는지 쉽게 찾기 위해서는 key와 value를 갖는 map이 나을 것 ..
2023.08.01 -
백준 15686 치킨배달 c++
//15686 #include #include #include #include #include using namespace std; int N, M; int arr[51][51]; int ans; vector v; vector house; void calclulate(vector &chicken){ int total = 0; for (int i = 0;i < house.size();i++) { int val = 987654321; for (int j = 0;j < chicken.size();j++) { val = min(val, abs(chicken[j].first - house[i].first) + abs(chicken[j].second - house[i].second)); } total += val;..
2023.07.27 -
백준 15683 c++
#include #include #include #include using namespace std; int N, M; int ans; int arr[9][9]; int dx[4] = { 1, 0, -1, 0 }; //90도 방향으로 수정 int dy[4] = { 0, 1, 0, -1 }; vector v; int count(void) { int cnt=0; for (int i = 0;i < N;i++) { for (int j = 0;j < M;j++) { if (arr[i][j] == 0) { cnt++; } } } return cnt; } void copy(int cpy0[9][9], int cpy[9][9]) { for (int i = 0;i < N;i++) { for (int j = 0;j < M..
2023.07.26 -
백준 2841 C++
간단한 stack문제이다. 줄마다 stack을 형성한 후 stack의 top원소와 눌러야 하는 프렛의 번호 크기를 비교하며 프렛의 번호 크기가 더 클때까지 stack pop연산을 수행해주면 된다. 그러나 항상 stack이 아니라 queue가 더 편할지 모른다는 두려움에 deque을 쓰는 습관이 있어서, 이 문제 역시 deque을 써서 풀었다. 코드는 다음과 같다.
2020.03.30