본문 바로가기

백준 사이트 코딩 문제/삼성 전자 기출문제

(11)
백준 14891번: 톱니바퀴 (C++) 문제 링크 : www.acmicpc.net/problem/14891 특별한 알고리즘이 없는 단순 구현, 시뮬레이션 문제이다. 자세한 설명은 코드 주석으로 달아놨다. 1. 해당 톱니를 움직인다. 2. 왼쪽 톱니들을 확인하며 움직일 톱니들을 움직인다. 3. 오른쪽 톱니들을 확인하며 움직일 톱니들을 움직인다. 4. 점수들은 계산해준다. #include #include #include using namespace std; deque wheel[4]; void move_wheel(int id, int dir) //id톱니 dir방향으로 움직이기 { if (dir == -1) //반시계방향 { wheel[id].push_back(wheel[id][0]); wheel[id].pop_front(); } else //시..
백준 17822번: 원판 돌리기 (C++) 문제 링크 : www.acmicpc.net/problem/17822 시뮬레이션, 구현 문제라서 딱히 특별한 알고리즘은 없다. 1. 원판의 층과 원판마다의 수를 이차원배열로 저장하면 편하다. (x축 - 원판 층, y축- 원판의 숫자들) 2. x의 배수들의 원판들을 조건만큼 회전 시켜준다. (ex - 배열의 앞의 숫자를 떼어서 맨 뒤에 붙이면 반시계방향 ) 3. 원판들의 수를 탐색하면서 인접한 같은 수들을 제거해준다 (dfs를 이용) 4. 인접한 같은 수가 하나도 없다면 평균 값을 구해서 조건에 따라 증가 또는 감소를 시켜준다. 5. 2,3,4를 끝날 때 까지 수행 1.원판인것을 잊으면 안된다. 탐색할 때 배열의 끝을 넘어가면 배열의 시작점으로, 배열의 시작점을 벗어나면 배열의 끝으로 이동하여야 한다. 2...
백준 17837번: 새로운 게임 2 (C++) 문제 링크 : www.acmicpc.net/problem/17837 구현 , 시뮬레이션 문제다. 문제에서 설명되어있는 그대로 구현을 하면 된다. 설명할 것이 딱히 없어서 코드에 주석처리만 해놓았다. #include #include using namespace std; class ins { public: int x, y, d; ins(int x, int y, int d) { this->x = x; this->y = y; this->d = d; } }; int n, k; int map[14][14]; vector map2[14][14]; //이차원 배열을 vector로 선언 (숫자들 쌓으려고) vector chess_piece; //체스말 정보 저장 int dir[5][2] = { {0,0}, {0,1},{..
백준 17779번: 게리맨더링 2 (C++) 문제 링크 : www.acmicpc.net/problem/17779 1. 이차원 배열을 순차 탐색하며 기준점과 d1,d2를 정해준다. 2. 기준점부터 왼쪽으로 내려가는 좌표와 오른쪽으로 내려가는 좌표를 나누어서 탐색한다. 3. 행마다,,, 1~lefty 는 왼쪽 영역, lefty ~ righty 는 가운데 영역, righty ~ n 까지는 오른쪽 영역 으로 구분해서 채운다. (아랫부분일때는 증가방식을 반대로 한다.) 4. 5영역의 경계선이 없는 행들도 다 채워준다. 5. 1,2,3,4를 반복한다. #include #include using namespace std; int map[22][22]; int n; int go_left[2] = { 1,-1 }; int go_right[2] = { 1,1 }; ..
백준 17142번: 연구소 3 (C++) 문제 링크 : www.acmicpc.net/problem/17142 1. 바이러스가 있는 지점들을 모두 vector에 넣어주고 dfs로 m개의 모든 조합을 선택한다. 2. m개의 바이러스를 선택했으면 spread_bfs로 바이러스를 퍼뜨려준다. 3. 바이러스를 퍼뜨리며 시간을 위치에 기록한다. 4. 이차원 배열에 0이 존재하면 스킵, 다 퍼졌으면 최대시간을 반환한다. 5. 2,3,4를 반복하며 최소시간을 구한다. 바이러스가 퍼진 시간을 구할 때,,바이러스가 빈 공간에만 모두 퍼진시간을 구하는 것이다. 즉 아직 비활성 상태의 바이러스에 더욱 퍼질 수 있어도 이미 빈공간에 다 퍼졌으면 그것이 최소시간이다. #include #include #include using namespace std; int n; in..
백준 17140번: 이차원 배열과 연산 (C++) 문제 링크 : www.acmicpc.net/problem/17143 구현, 시뮬레이션 문제이다. 1. 행이 열보다 크면 R 연산으로 모든 행마다 벡터로 저장을 해서 sorting함수로 넘겨준다. 열이 행보다 크면 C 연산으로 모든 열마다 벡터로 저장을 해서 sorting 함수로 넘겨준다. 2. sorting 함수에서 sorting을 진행해준다. 2-1. 벡터를 탐색하며 num_count배열에서 해당 숫자의 index의 값을 증가시켜줌(숫자 개수 구하는 거임) 2-2 num_count를 탐색하며 벡터에 (숫자와 개수를) 쌍으로 넣어준다. 2-3 넣으준 벡터를 sort 라이브러리로 문제 조건대로 정렬시켜줌 3. sorting으로 정렬이 되면 그 뒤의 값들은 0으로 채워준다, row와 column 사이즈 갱신..
백준 17143번: 낚시왕 (C++) 문제 링크 : www.acmicpc.net/problem/17143 시뮬레이션, 구현 문제이다. 1. 오른쪽으로 한 칸 이동한다. 2. 물고기를 잡는다. -물고기를 잡을때는 해당 열에서 밑으로 내려가면서 탐색을 하다가 상어를 만나면 지도에서 제거하고 sum에 더한다. 3. 1초동안 물고기들을 움직이게 한다. - 지도를 탐색하면서 상어가 있으면 상어들을 움직이게 해준다. 움직인 상어들을 tmp임시지도에 저장한다. - 임시 지도를 현실 지도로 복사한다. (현실 지도를 순차탐색 하고 있기 때문에 이미 움직인 상어를 선택하지 않기 위해 임시지도 사용) 4. 1,2,3번을 n번 반복한다. (시간복잡도) 생각없이 그냥 속력1마다 이동하는 식으로 구현을 하면 시간초과가 나게 된다. 그 이유는 상어의 s속력의 범위가 ..
백준 16236번: 아기 상어 (C++) 문제 링크 : https://www.acmicpc.net/problem/16236 bfs문제입니다. bfs로 먹을 수 있는 먹이를 계속 찾습니다. bfs가 끝날때 마다 먹이를 찾는데 걸리는 시간을 계속 더해줍니다. 만약 먹을 수 있는 먹이가 더이상 없다면 종료시켜줍니다. - 최단 거리의 먹이들 중 가장 위쪽에서 왼쪽인 먹이를 찾기위해 일단 최단 거리의 먹이를 전부 저장해야함 -> 처음 먹이를 찾을때의 거리(최단 거리)를 저장한 후 거리가 더 커지기 전까지의 먹이를 전부 저장한다. (bfs는 가까운 것부터 탐색하므로 거리가 같은 부분끼리 뭉쳐서 queue에 저장된다.) - 상어 정보를 저장하는 class (저장해야 하는 속성이 3개 이상이라 class를 정의함) - 같은 거리의 먹이들을 임시저장하기위한 v..
백준 16235번: 나무 재테크 (C++) 문제 링크 : https://www.acmicpc.net/problem/16235 단순 구현 문제입니다. 1. map 이차원 배열을 vector 데이터 타입으로 선언해 공간마다 벡터를 갖게 합니다. 2. 봄과 여름을 동시에 처리합니다. sorting 된 벡터에서 나이가 낮은 나무부터 양분을 주며 나이를 증가시킵니다. 양분이 부족하면 그 후부터의 나무들을 모두 죽이며 양분으로 만듭니다. 3. 가을에 map 이차원 배열을 탐색하며 5배수의 나무가 있으면 주변에 모두 나이 1 나무를 번식시킵니다. 4. 겨울에 다시 양분을 합해줍니다. 5. k번이 지나면 남은 나무의 개수를 구해줍니다. #include #include #include using namespace std; int n, m, k; int feed_..
백준 16234번: 인구 이동 (C++) 문제 링크 : https://www.acmicpc.net/problem/16234 단순한 bfs 문제였습니다. 1. 한 좌표에서 bfs로 이차원 배열을 탐색합니다. 탐색 되지 않은 좌표들은 다시 bfs를 돌려줍니다. (다음 노드가 L 이상 R 이하인 부분만 탐색하는 bfs.) 2. 한 좌표에서 bfs를 돌려 탐색 된 부분들은 한 연합입니다. 연합나라들의 수를 분배합니다.(bfs를 돌릴 때 vector에 각 좌표를 저장해두면 쉽게 수를 분배할 수 있습니다. 3. 한 연합 안에서 사람 수들이 모두 같지 않으면 결국 이동을 해야 합니다. 4. 이동할 필요가 없으면 종료해줍니다. #include #include #include using namespace std; int n, L, R; int people[52..