목록전체 글 (217)
Study hard

programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있�� programmers.co.kr [풀이] bfs탐색으로 풀었다. 예제를 보면 컴퓨터 1대만 있어도 네트워크로 치는 것을 알 수 있다. 그래서 N번 for문을 돌리며 아직 네트워크임을 체크하지 않은 컴퓨터가 있으면 bfs로 이어진 네트워크 모두를 체크하고, 네트워크의 개수는 bfs가 호출되는 개수로 구하였다. #include #include #include using namespace std; int..

programmers.co.kr/learn/courses/30/lessons/43165 코딩테스트 연습 - 타겟 넘버 n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+ programmers.co.kr [풀이] dfs 중복 순열을 구하여 푸는 문제였다. -는 0, +는 1로 표시하여 0과 1로 이루어진 numbers의 크기와 같은 중복 순열을 구하고, 각 경우에 대해 연산 결과와 target값을 비교하였다. 중복 순열: n개의 수 중 r개의 수를 중복을 허용하여 한 줄로 나열하는 경우의 수. 순서가 다르면 다른 경우로 침..

www.acmicpc.net/problem/17140 17140번: 이차원 배열과 연산 첫째 줄에 r, c, k가 주어진다. (1 ≤ r, c, k ≤ 100) 둘째 줄부터 3개의 줄에 배열 A에 들어있는 수가 주어진다. 배열 A에 들어있는 수는 100보다 작거나 같은 자연수이다. www.acmicpc.net [풀이] 문제에 주어진 규칙으로 연산을 진행하는 문제였다. - C연산을 R연산과 같은 방식으로 해주기 위해 배열의 행과 열을 반전시키는 setAcopy함수와 resetAcopy함수를 구현했다. - number_cnt[]에 행에 같은 숫자가 몇 번 나오는지 저장하고, 1번 이상 나온 숫자는 벡터에 나온 횟수와 함께 저장한다. - 나온 횟수를 기준으로 벡터를 정렬하고 배열 A에 정렬된 순서대로 값과 나..

www.acmicpc.net/problem/16236 16236번: 아기 상어 N×N 크기의 공간에 물고기 M마리와 아기 상어 1마리가 있다. 공간은 1×1 크기의 정사각형 칸으로 나누어져 있다. 한 칸에는 물고기가 최대 1마리 존재한다. 아기 상어와 물고기는 모두 크기를 가�� www.acmicpc.net [풀이] bfs 최단거리를 구하는 문제였다. 1. 아기 상어의 크기보다 작은 물고기를 벡터에 저장 2. 먹을 수 있는 물고기 없으면 종료 3. 1마리면 그 자리까지 갈 수 있는지 확인 후 갈 수 있으면 먹는다. 갈 수 없으면 종료. (Time += 물고기 먹으러 간 거리) 4. 2마리 이상이면 그 자리까지 갈 수 있는지와 어느 물고기가 가장 가까운지 비교해가며 거리를 구한다. 어떤 물고기로도 갈 수 ..

www.acmicpc.net/problem/17142 17142번: 연구소 3 인체에 치명적인 바이러스를 연구하던 연구소에 승원이가 침입했고, 바이러스를 유출하려고 한다. 바이러스는 활성 상태와 비활성 상태가 있다. 가장 처음에 모든 바이러스는 비활성 상태이고 www.acmicpc.net [풀이] dfs 조합으로 활성화시킬 바이러스 M개를 뽑고, 그에 따라 bfs를 이용하여 확산시켜야 하는 문제였다. bfs level(깊이)갱신을 잘못 이해해서 애먹었다. 각 칸마다 점수가 있는게 아니므로 처음방문 했을 때 시간이 최단 시간임을 명심하자! 한 번 방문했으면 다시 방문하지 않아도 됨!! 빈칸을 미리 세어두고 바이러스를 확산시켰을 때 방문하는 빈칸들의 개수와 비교하여 같으면 최솟값을 갱신하였다. 각 경우마다 ..

www.acmicpc.net/problem/14889 14889번: 스타트와 링크 예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다. www.acmicpc.net [풀이] dfs 조합으로 모든 경우의 수를 탐색하는 문제였다. 매 경우의 수마다 스타트 팀과 링크 팀의 능력치 차를 계산하여 최소값을 갱신한다. #include #include //min #include //abs using namespace std; int N; int S[21][21]; bool Select[21];//스타트 팀에 속한 사람 int totalS = 0; int Min = 987654321; void getDiff..