본문 바로가기

분류 전체보기

(78)
[BOJ 14502] 연구소 이 문제는 3개의 벽을 맵에 세우고 바이러스가 퍼졌을 때 안전 구역의 최대 갯수를 구하는 문제이다. 벽은 안전구역에 설치할 수 있고 무조건 3개를 설치한다. 문제 풀이 : 벽을 세울 수 있는 3곳을 모두 만들어 본 뒤 바이러스 지역에서 bfs 를 돌려 바이러스를 퍼뜨리고 그 후에 안전 구역의 갯수를 계산했다. 시간복잡도는 N과 M 이 최대 8이므로 (8 X 8)^3 이다. 여기에 bfs를 돌리므로 8 ^2을 곱하면 8^8 = 2^24 =1677216 이다. 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747..
[BOJ 14503] 로봇 청소기 시뮬레이션 문제이다. 주어진 조건을 만족하게 로봇을 이동시킨다. 처음에 갈 수 있는 곳이 있는지 확인한 후에 갈 수 있을 때와 없을 때를 나누어 코딩했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #include #include using namespace std; int dx[] = {-1,0,1,0}; // up right down left int dy[] = { 0,1,..
[BOJ 14890] 경사로 N X N 크기의 맵에 가로 N개 세로 N 개를 더해서 총 2N 개의 길이 있다. 각 지점에는 숫자가 써 있는데 높이를 나타낸다. 숫자가 같은 곳만 이동할 수 있는데 여기에서 경사로가 주어진다. 길이 L , 높이는 1로 고정되어있다. 경사로의 갯수는 무한하며 이 경사로들을 적절히 활용해 지나갈 수 있는 길의 갯수를 출력한다. 제약조건은 문제에 명시되어 있다. 문제 풀이 : 한 행, 한 열 씩 뜯어서 제약 조건에 위배가 되면 false 를 return 하는 check 함수 만들어 정답을 찾아냈다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636..
[BOJ 14889] 스타트와 링크 N(짝수인 정수)가 주어졌을때 2팀으로 나누어 팀간의 능력치를 최소화하는 문제이다. 문제 풀이 : 팀을 나눌 수 있는 모든 경우를 다 본다음 능력치 차이의 최솟값을 출력했다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include #include #include #include using namespace std;int N;int ans;void solve(vector &map, vector v) { int arr[2] = {0,0}; for (int i = 0; i > N; vector map(N+1, vector(N+1)); for (int i = 1; i map[i][j]; } } vec..
[BOJ 14891] 톱니바퀴 각 톱니바퀴가 맞닿은 부분의 극이 반대라면 회전하고 같으면 회전하지 않는다. 이 때 입력으로 들어오는 모든 회전을 한 뒤 최종 톱니바퀴의 상태에 따라서 점수가 부여되는데 그 점수의 합을 구하는 문제이다. 문제 풀이 : 단순한 구현문제로 입력으로 들어온 회전을 할 때 마다 1,2,3,4 톱니바퀴의 회전방향을 저장한뒤 마지막에 다 돌려주었다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 ..
[BOJ 14888] 연산자 끼워넣기 N개의 수들이 들어오면 N-1 개의 주어진 +,-,*,/ 연산자로 적절히 배열해 최댓값과 최솟값을 구하는 문제다. 수들의 배열은 바뀌지 않는다.시간 복잡도는 N-1개의 연산자들을 나열하는 것이므로 (N-1)! 이 되겠다. N의 최댓값이 11이므로 N-1은 10 즉 ,10! = 3628800 이다. 완전탐색을 이용해 풀었다. 주의할 점은 최솟값이 음수가 나올 수 있다는 점이다. 이 점 때문에 몇번이나 틀렸다... 123456789101112131415161718192021222324252627282930313233343536373839404142#include #include #include using namespace std;int N;int a, b;void solve(vector &num, int p..
[BOJ 14501] 퇴사 이 문제는 상담할 수 있는 N일이 주어지고 상담을 마치는데 걸리는 시간과 상담을 했을 때 얻는 수익이 주어진다. N+1일날 퇴사를 하고자 할때 남은 N일 동안 상담을 진행하여 낼 수 있는 최대 수익을 구하는 문제다. 문제 풀이 : 각 날에 상담을 한다 / 안 한다로 구분하여 모든 경우의 수를 탐색해 최대 수익을 계산했다. 123456789101112131415161718192021222324252627282930313233343536373839#include #include using namespace std; int N;int ans; void solve(vector &v, int day, int pay) { if (day > N) { return; } if (day==N) { if (ans > N; ..
삼성 SWEA 점심 식사시간 이 문제는 주어진 맵에 사람은 1로 계단은 2이상의 정수로 표현되어 나타난다. 계단은 무조건 2개이며 사람들은 1번 계단 혹은 2번 계단으로 모두 점심 식사를 하러간다. 이 때 계단으로 표현된 2 이상의 정수는 계단을 내려가는 소요시간을 뜻한다. 계단으로 이동하는 소요시간은 계단의 위치를 x,y 사람의 위치를 a,b 라 했을 때 |x-a|+|y-b| 로 표현된다. 동시간에 사람들이 한 계단에 도착할 수 있는데 최대 3명까지밖에 계단을 한 번에 내려갈 수 없다. 즉, 3명이 계단을 내려가고 있는 중이라면 4번 째 오는 사람은 계단에서 대기해야한다. 계단 입구에 도착하면 1분 후 내려갈 수 있다고 나오는데 애초에 사람과 계단사이의 거리를 구할 때 +1을 해 놓은 상태로 하면 훨씬 편하다. 사람들이 1 또는 ..