끄적끄적 코딩
article thumbnail
[C++] 백준 2188번 축사 배정
알고리즘 2019. 8. 27. 18:21

축사에 소를 배치하려고 할 때, 소들이 원하는 축사에 들어갈 수만 있다면 최대로 넣을 수 있는 소들의 수를 구하는 문제입니다. 1. 소 A가 원하는 축사가 비어있다면 넣어줍니다. 2. 소 A가 원하는 축사에 다른 소 B가 있다면 - 소 B가 이동 할 수 있는지 확인합니다. [소 B는 1~2번의 과정을 반복] 3. 이동에 성공하면 소 A를 축사에 넣고 카운트를 증가합니다. 실패했다면 카운트를 증가시키지 않습니다. #include #include #include #include using namespace std; int visit[210]; int room[210]; vector v; int solve(int x) { if (visit[x]) { return 0; } visit[x] = 1; for(int..

article thumbnail
[C++] 백준 1931번 회의실배정
알고리즘 2019. 8. 27. 14:37

회의실을 최대한 많이 배정할 때의 개수를 구하는 문제입니다. 처음에는 짧은 회의를 중심으로 구현을 했는데 예를들어 회의가 3개고 1번 회의 : 1~10시 2번 회의 : 9~12시 3번 회의 : 11 ~ 20시 다음과 같을때 짧은 2번회의를 우선하게되면 1, 3번 회의는 시간이 다르지만 진행할 수 없게 됩니다. 그래서 끝나는 시간을 우선으로 생각해보았습니다. 1. 가장 먼저 끝나는 시간 확인 2. 시작 시간이 이미 끝난 회의랑 겹치지 않는지 3. 같은 시간에 시작하는 회의가 있다면 짧은것을 먼저 시작 먼저 같은 시간에 시작하는 회의가 있을때 짧은것을 시작하기 위해 sort함수로 시작시간을 정렬해주었습니다. 그리고 먼저 끝나는 시간을 확인하기 위해 sort함수로 종료시간을 정렬해주었습니다. 시작 시간이 이미..

article thumbnail
[C++] 백준 1806번 부분합
알고리즘 2019. 8. 27. 12:39

투포인터 문제입니다. n개의 수열이 주어지고 n개의 수열중 인접한 수들을 더해서 m을 만들 수 있는 최소한의 덧셈의 횟수를 구하는 문제입니다. 1. 포인터 x를 제자리에 두고 포인터 y를 m이 될때까지 더하면서 이동합니다. 2. m이 되거나 넘었으면 count를 최소값과 비교해서 작으면 넣습니다. 3. x를 한칸씩 이동하면서 m이 되지 않을때까지 위치에 있는 배열값을 뺍니다. count도 감소. 4. m보다 낮아졌으면 다시 1~3을 반복합니다. 위와같은 방법으로 count중 가장 최소값인것을 찾을 수 있습니다. #include #include #include using namespace std; int main(int argc, char* argv[]) { int n, m; int i, j; int fl..

article thumbnail
[C++] 백준 10828번 스택
알고리즘 2019. 8. 26. 23:25

스택 문제입니다. push, top, size, empty, pop에 대한 입력을 받으면 그에 맞는 출력을 하는 문제입니다. 간단하게 5가지에 대한 함수를 만들어주고 각각 실행될때의 결과값을 그대로 실행해주면 됩니다. #include #include #include using namespace std; stack s; void push(int x) { s.push(x); } int pop() { if (!s.empty()) { int x = s.top(); s.pop(); return x; } return -1; } int size() { return s.size(); } int empty() { if (s.empty()) { return 1; } return 0; } int top() { if (!s...

article thumbnail
[C++] 백준 1107번 리모컨
알고리즘 2019. 8. 26. 17:24

브루트포스 방식으로 문제를 풀었습니다. 리모컨의 몇몇 버튼이 고장났을 때 N까지 최소 몇번의 버튼을 눌러야 이동할 수 있는지 구하는 문제입니다. 시작은 100부터 시작하고, 숫자버튼을 눌러서 이동하는것외에 위아래로 이동도 가능합니다. 1. 100번부터 +, -를 통해서 이동하는 방법 2. 번호버튼을 눌러서 +, -를 통해서 이동하는 방법이 있습니다. 처음 minNum에 100번부터 +, -로 N까지 이동하는 경우의 횟수를 넣어넣고 모든 고장나지 않은 버튼으로 만들 수 있는 숫자에 대해서 N과 차이가 얼마나 나는지 구하고 , 숫자버튼을 누르는것도 하나의 행동이므로, 현재 탐색하고 있는 버튼의 길이를 추가로 더해서 minNum과 비교해서 작은 값들을 쌓아갑니다. 전부 구했으면 minNum을 출력해서 문제를 ..

article thumbnail
[C++] 백준 6603번 로또
알고리즘 2019. 8. 25. 18:10

DFS로 문제를 풀었습니다. 로또를 할 때 몇개의 번호로 조합가능한 수들을 출력하는 문제입니다. DFS를 통해서 각 숫자에서 깊이가 6이 될때까지 조합을 만듭니다. 만든 조합들은 전부 출력합니다. #include #include #include using namespace std; int n; int arr[20]; int com[20]; void DFS(int next, int depth) { if (depth == 6) { for (int i =0; i arr[i]; } DFS(0, 0); cout

article thumbnail
[C++] 백준 1260번 DFS와 BFS
알고리즘 2019. 8. 25. 17:05

DFS, BFS 문제입니다. 2차원 벡터를 이용해서 그래프를 만들었습니다. 방문할 정점이 여러개인 경우 작은 수 부터 가기때문에 연결된 정점이 오름차순이 되도록 sort함수로 정렬해주었습니다. visit배열을 이용해서 이미 방문한 곳을 방문하지 않게 하였으며 DFS와 BFS를 이용해서 결과값을 도출해내서 출력했습니다. #include #include #include #include #include #include using namespace std; int n, m, v; int visit[10010]; vector vec; void DFS(int z) { visit[z] = 1; cout m; cin >> v; for (int i = 0; i > x >> y; vec[x].push_back(y); ve..

article thumbnail
[C++] 백준 1697번 숨바꼭질
알고리즘 2019. 8. 25. 16:11

BFS로 문제를 풀었습니다. 수빈이는 1초에 3가지 행동중 하나를 할 수 있습니다. (X는 현재위치) 1. X = X + 1; 2. X = X - 1; 3. X = X * 2; 이 3가지에 대해서 BFS를 통해서 탐색해나갔고 이미 방문한 곳은 visit배열에 몇초가 걸렸는지를 넣어둠으로서 위치에 대한 방문여부와, 시간을 저장할 수 있었습니다. 동생이 있는 위치를 찾으면 visit[동생위치]를 출력하였으며, x*2를 했을때 배열을 초과할 수 있기 때문에 동생 위치 * 2 까지만 접근 가능하게 했습니다. #include #include #include #include #include using namespace std; int N, K; int visit[200010]; void BFS() { int l =..

검색 태그