전체 글 120

[백준 1325] 효율적인 해킹

문제설명 이 문제는 연결관계를 파악하여 해킹 가능한 컴퓨터가 많은 컴퓨터를 출력한다 만약 그 갯수가 동일하다면, 컴퓨터의 번호를 오름차순으로 출력한다 알고리즘 1. 컴퓨터의 수와 간선의 관계를 입력받는다 2. 간선의 관계는 단방향으로 저장한다(b가 해킹되면 a도 가능하다) 3. bfs 함수에서 각 컴퓨터가 해킹가능한 컴퓨터의 수를 센다 4. 컴퓨터의 수와 컴퓨터 번호를 저장한다 5. 정렬을 통해 해킹 할 수 있는 컴퓨터의 수가 가장 많은것, 그리고 인덱스는 오름차순으로 정렬한다 6. 첫 값은 무조건 가장 크기때문에 이와 같은 값인 컴퓨터의 인덱스를 모두 출력한다 코드 #include #include #include #include using namespace std; vector graph[10001];..

Algorithm 2022.06.21

[백준 16953] A->B

문제설명 알고리즘 1. A,B를 입력 받는다 2. 함수로 이동하여 B로 부터 A로 만든다 3. queue에 B의 값을 넣고, 나누기 2 혹은 -1 한 뒤 , 10으로 나누었을 때 값이 A보다 작지 않으면 queue에 넣는다 4. a의 값이 현재 값과 같아지는 순간이 나오면 그 초를 결과로 출력한다 5. 만약 같아지는 순간이 오지 않았다면, -1을 출력한다 코드 #include #include #include using namespace std; int answer; bool check = false; void bfs(int x,int y) { queue q; // 나눗셈 연산에 의해 비교할 때 소수점 까지 비교필요 q.push(y); while (!q.empty()) { int size = q.size(..

Algorithm 2022.06.19

[백준 2644] 촌수 구하기

문제설명 해당 문제는 그래프에서 이동 수를 구하는 문제이다 시작 노드에서 도착 노드까지 도달하는데 이동 수를 구하면된다 먼저 총 가족의 수와 구하고자 하는 노드, 연결관계를 입력받는다 촌수 == 도달 하기위해 거쳐가야 하는 노드의 수 라고 생각하고 풀면된다 알고리즘 1. 필요한 정보(가족 수, 구하고자 하는 관계, 관계 정보)를 입력 받는다 2. 현재 노드에 방문 표시를 한다 3. 현재 노드와 연결된 노드를 조회하여 방문 하지 않은 경우 방문한다. 단 방문시 이동 값을 올려준다 4. 노드가 도착점에 닿았을 때 현재 이동한 수를 저장해둔다 5. 함수를 빠져나오면 저장해둔 이동 수를 출력시킨다 6. 만약 출발점에서 도착점에서 도달하지 못한 경우 -1을 출력시킨다 코드- (1) ->DFS #include #i..

Algorithm 2022.06.17

[백준 1697] 숨바꼭질

문제설명 해당 문제는 동생의 위치와 수빈이의 위치를 입력 받은 뒤 동생을 찾을 수 있는 가장 빠른 시간을 출력하면된다. 수빈이는 +1, -1, *2 로 매 초당 이동할 수 있다. 알고리즘 1. 수빈이와 동생의 위치를 입력받는다 2. 수빈이의 위치를 queue에 넣고 +1, -1, *2로 이동하였을 때 값이 지정범위를 벗어나는지, 방문한적 있는지 확인하고 조건에 맞는경우 queue에 넣는다 3. queue에서 front 값을 출력하여 도착지점에 도달하였는지 확인한다 -> 도달 시 반복문 탈출 4. 매 연산이 끝날 때 마다 초를 증가 시킨다 코드 #include #include #include using namespace std; #define MAX 100001 bool visited[MAX]; int b..

Algorithm 2022.06.17

[백준 9461] 파도반 수열

문제설명 테스트 케이스 수를 입력 받은 뒤, 입력되는 N의 값을 출력 시키면된다. 이 때 각 값의 정의를 보자면, P(1) = 1 P(2) = 1 P(3) = 1 P(4) = 2 P(5) = 2 P(6) = 3 P(7) = 4 P(8) = 5 P(9) = 7 P(10) = 9 값이 나오는 것을 확인할 수 있다. 이 값의 의미는 1번째 삼각형 일때 최대 정삼각형의 변의 길이가 1이라는 뜻이다. 즉 P(10)의 경우 10번째 삼각형을 위의 그림과 같은 규칙으로 그렸을 때 최대 정삼각형의 변의 길이가 9라는 의미이다. 해당 값을 나열해보면 다음과 같은 점화식을 구할 수 있다. P(N) = P(N-3) + P(N-2) 해당 식을 이용하여 코드를 짜면 된다. 알고리즘 1. 점화식을 이용하여 미리 답을 저장할 배열..

Algorithm 2022.06.17

[백준 11286] 절댓값 힙

문제 이번 문제는 전체 연산을 반복할 수를 입력받은뒤, 값을 저장하거나 출력하는 문제이다. 0이 입력되면 배열에 저장된 절대값이 가장 작은 값을 출력한다. 이 때 저장된 절대값이 작은것이 여러개면 그냥 가장 작은 값을 출력한다. 0이 들어왔는데 배열이 비어있는 상태면 0을 출력하도록 한다. 0 이외의 수가 입력 되었을 경우에는 입력된 값을 배열에 저장한다. 알고리즘 1. 반복할 횟수를 입력받는다 2. 양수를 저장하는 우선순위 큐, 음수를 저장하는(단, 양수용 큐는 내림차순, 음수용은 오름차순) 우선순위 큐를 선언하여 0 외의 값이 들어왔을 때 저장한다 3. 0이 들어왔을 경우 각 음수,양수 큐가 비어있는 지 확인하고 둘다 비어있으면 0, 하나만 비어있으면 비어있지 않은 것에서 가장 작은 값을 출력한다 4..

Algorithm 2022.06.16

[백준 11659] 구간 합 구하기4

문제설명 해당 문제는 주어진 조건에 맞게 수를 입력 받은 뒤 구간 사이의 합을 구하여 출력시키는 문제이다. 알고리즘 1. N,M과 수의 값들을 각자 입력받는다 2. 수를 입력 받음과 동시에 그 전에 받은 값을 이용하여 합을 구한다 3. 구간을 입력 받으면 그 동시에 계산을 미리 해놓은 배열에서 빼서 시간을 단축시킨다 코드 #include #include using namespace std; #define MAX 100001 int ans[MAX];//값을 받음과 동시에 합을 구함 int main() { //입출력 시간 단축 ios_base::sync_with_stdio(false); cin.tie(NULL); int N, M; cin >> N >> M; ans[0] = 0; for (int i = 1; ..

Algorithm 2022.06.16

[백준 4963] 섬의 개수

문제설명 땅과 바다의 값을 입력 받은 다음 총 섬의 개수를 구하는 문제이다. 여러번 테스트 케이스를 입력 받을 수 있도록 코드를 짜야하며, 지도의 너비와 높이가 주어진다. 1은 땅, 0은 바다로 간주한다. 이때 땅은 가로, 세로 뿐만 아니라 대각선으로도 갈 수 있다. 알고리즘 1. 지도의 너비와 높이를 입력받는다 2. 지도의 정보(0과 1)을 입력받는다 3. 상하좌우, 대각선 연결된 섬을 찾는다(dfs 알고리즘 사용) 4. 섬의 개수를 센다 5. 지도를 초기화 한다. 코드 #include #include #include #include using namespace std; #define MAX 51 int graph[MAX][MAX]; bool visited[MAX][MAX]; void dfs(int x..

Algorithm 2022.06.15

[HackerRank ] Minimum Absolute Difference in an Array

문제설명 vector에 숫자들이 입력되어 있다. 두 숫자의 절대값 차를 계산하여 가장 작은 값을 결과값으로 낸다. 알고리즘 vector sort vector 전체 순회 및 가장 작은 차(min) 계산 min값 반환 알고리즘은 minimumAbsoluteDifference 함수만 확인하면 된다. 코드 #include using namespace std; string ltrim(const string &); string rtrim(const string &); vector split(const string &); /* * Complete the 'minimumAbsoluteDifference' function below. * * The function is expected to return an INTEGE..

Algorithm 2022.04.06

[백준 1927] 최소 힙

문제설명 첫 줄에 연산의 수를 입력 받고, 나머지 수들을 입력 받는다. 이때 0이 들어올 때는 힙에서 가장적은 수를 출력 시킨다. 만약 힙이 없는 경우에는 0을 출력한다. 0외의 숫자가 입력되는 경우에는 힙에 넣는다. 알고리즘 heap 선언, list 선언 총 숫자의 갯수 입력 0인지 여부 판단 후 list에 원소의 수를 세어보고 0이면 0출력, 그렇지 않는 경우 heap에서 꺼냄 0이 아닌경우 heap에서 가장 작은 수 출력 코드 import heapq as hq import sys temp=[] num= int(sys.stdin.readline()) for i in range (num): n= int(sys.stdin.readline()) if n==0: #0이 들어온 경우 if(len(temp))=..

Algorithm 2021.08.01