백준(14)
-
백준 17142 연구소 3
문제 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고, 활성 상태인 바이러스는 상하좌우로 인접한 모든 빈 칸으로 동시에 복제되며, 1초가 걸린다. 승원이는 연구소의 바이러스 M개를 활성 상태로 변경하려고 한다. 연구소는 크기가 N×N인 정사각형으로 나타낼 수 있으며, 정사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽, 바이러스로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 활성 바이러스가 비활성 바이러스가 있는 칸으로 가면 비활성 바이러스가 활성으로 변한다. 예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자. 0은 빈 칸, 1은 벽, 2..
2023.08.03 -
백준 14888 연산자 끼워넣기 c++
해당 문제는 백트래킹 문제로 풀었다. 앞에서 소개한 문제와 거의 비슷한 방식으로 풀었다. 수열을 두고, 수열 각각의 원소에 대해 +, -, *, / 를 차례로 반복문을 돌았다. 1+2+3 1+2-3 1+2*3 1+2/3 1-2+3 1-2-3 1-2*3 1-2/3 ... 이런식으로 구성될 수 있도록 코드를 짰다. 세번정도 틀렸는데, 첫번째로는 정수형을 가장 크게 한다고 unsigned int 라고 잡았는데, 뺄셈이 있기 때문에 음수의값이 나올 수 있다. 그래서 이 부분때문에 틀렸다. 두번째로는 43% 정도에서 틀렸습니다가 계속 떴다. 질문게시판을 확인해보니 min_ans, max_ans 값으로 둔 값이 987654321이 정수형의 최대값이 아니어서 틀린 것 같다. c++에서는 climits라는 라이브러리에..
2023.08.01 -
백준 14889 스타트와 링크 c++
해당 문제는 백트래킹 문제이다. N명의 사람이 있고 N/2, N/2로 사람을 나눈 후에 능력치를 계산해주면 된다. N/2, N/2로 팀을 백트래킹으로 나눠주었다. 그리고 cnt==N/2 가 되면 그 때 능력치를 계산해서 업데이트 해줬다. 정말 여러번 시간 초과가 났다. #include #include #include int N; int arr[21][21]; int ans = 987654321; int team[21]; using namespace std; void dfs(int cnt, int start) { if (cnt == N / 2) { int total1 = 0, total2 = 0; for (int i = 0;i < N;i++) { if (team[i] == 1) { for (int j = ..
2023.08.01 -
백준 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 -
boj14891 톱니바퀴 c++
코드 #include #include #include #include #include using namespace std; void rotate(deque &v, int dir) { int f; if (dir == 1) { f = v.back(); v.pop_back(); v.push_front(f); } else if (dir == -1) { f = v.front(); v.pop_front(); v.push_back(f); } } int cal(vector v) { int total = 0; for (int i = 0;i < 4;i++) { if (v[i + 1][0] == 1) { total += pow(2, i); } } return total; } int main(void) { // cin.tie..
2023.07.25