Algorithm/C++ - BOJ 61

BOJ/백준 - 1436 영화감독 숌

문제 이해를 잘 못해서 도움을 받은 문제.. 연속된 666을 찾으면 되는건데, N번째로 작은 종말의 숫자와 같다. 작은!!!!! 그래서 666 1666 2666 . . 5666 6666 =666까지만 반복하며, 종말의 숫자를 만족하면 cnt를 증가시키고, 아니면 1의 자리를 하나씩 지우는 식. 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 #include using namespace std; int main() { int N; cin >> N; int result = 665; int cnt = 0; while (cnt!=N) { int tmp = ++result; while (tmp >= 666) { if (tmp % 1000 == ..

Algorithm/C++ - BOJ 2021.06.22

백준/BOJ - 1065 한수 C++

문제 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 같은 한수의 개수를 출력하는 프로그램을 작성하시오. www.acmicpc.net/problem/1065 1065번: 한수 어떤 양의 정수 X의 각 자리가 등차수열을 이룬다면, 그 수를 한수라고 한다. 등차수열은 연속된 두 개의 수의 차이가 일정한 수열을 말한다. N이 주어졌을 때, 1보다 크거나 같고, N보다 작거나 www.acmicpc.net 따라서 한자리, 두 자리 수 숫자는 모두 한수이다. =>아래 예제 출력에서도 알 수 있음. 입력 조건이 1000보다 작거나 같은 N이므로 1000은 어차피 fals..

Algorithm/C++ - BOJ 2021.04.12

BOJ/백준 - 11501 주식 C++

앞에서부터 주식이 가장 비싼 날에 판매하는 식으로 구하면 더 복잡해진다 그니까 [3 5 9] 날로 입력받았고 3 다음에 더 떨어질지 오를지 예측하는 것 보다 뒤에서부터 구하는게 더 낫다는 이야기. 그래서 max값보다 떨어졌으면 이익을 더해주는 식이 된다. 처음엔 max값과 index값을 찾아서 계산해주는 식으로 구했는데, [1 1 3 1 2]로 입력받았을 경우엔 max=3, index=2가 되어 index 0,1에 대해서만 구해 5로 출력해야하지만 4로 출력해서 안됨 그냥 뒤에서부터 계산하면서 v[i]가 max보다 크면 max에 대입해주면 되고, 아니면 result에 더해주면 된다. 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..

Algorithm/C++ - BOJ 2021.04.12

BOJ/백준 - 1715 카드 정렬하기 C++

작은 수부터 정렬해서 차례로 더해주면 된다. 우선순위 큐만 알면 쉽게 풀 수 있는 문제였다. 예제를 보면 N이 3, 차례로 10, 20, 40이 입력되는데 1. 10+20 한번, 30+40으로 N-1번 연산해주면 된다. 따라서 pq.size()!=1일때까지 while문을 돌려준다. 2. a와 b를 꺼내서 더해주고, 다시 pq에 push해준다. 3. greater(오름차순)정렬했으므로 작은 것 부터 차례로 더해줄 수 있게 된다. 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 #include #include #include using namespace std; int main() { cin.ti..

Algorithm/C++ - BOJ 2021.04.06

BOJ/백준 - 1665 가운데를 말해요 C++

가운데를 말해보자!!!!!! www.acmicpc.net/problem/1655 1655번: 가운데를 말해요 첫째 줄에는 수빈이가 외치는 정수의 개수 N이 주어진다. N은 1보다 크거나 같고, 100,000보다 작거나 같은 자연수이다. 그 다음 N줄에 걸쳐서 수빈이가 외치는 정수가 차례대로 주어진다. 정수는 -1 www.acmicpc.net 이거는..이거는 진짜 헷갈렸다 최대힙과 최소힙을 사용해서 문제를 풀어보자. 최대힙 : 값이 클 수록 우선순위 큼 최소힙 : 값이 작을 수록 우선순위 큼 *maxHeap의 top값은 중간값과 작거나 같아야 함 이렇게 만들거고, 이 개념을 토대로 중간값을 구하면 된다. 그래서 입력된 수열들의 중간값을 기준으로 각각 maxHeap, minHeap에 넣을것이다. 다음과 같은..

Algorithm/C++ - BOJ 2021.03.24

BOJ/백준 - 2178 미로탐색 C++

가장 가까운 거리! 어쩌구저쩌구하면 bfs를 이용하도록 하자! 1. cnt계산 하지 않고 map에 넣어주면서 마지막에 map[map[N-1][M-1]을 출력해주기 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 #include #include #define MAX 102 using namespace std; int map[MAX][MAX]; int N, M; int visit[MAX][MAX]; int dx[4] = { 0,0,1,-1 }; int d..

Algorithm/C++ - BOJ 2021.03.04

BOJ/백준 - 1012 유기농 배추 C++

문제 풀 때 x랑 y를 잘못 넣어서 고생을 좀 했다. 두번 다시 헷갈리지 않게 적어놓는다...ㅠㅠ 1. 2. 잘 보고 풀자~! 나는 arr[y][x]가 더 익숙해서 그렇게 풀었다. * 그리고 초기화를 할 때, for문을 이용해서 하지 않았다. #include #include void* memset(void* ptr, int value, size_t num); memset을 이용해서 더 간단하게 초기화하자. 1. dfs 풀이 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 ..

Algorithm/C++ - BOJ 2021.03.03

BOJ/백준 - 2891 카약과 강풍 C++

1. 모든 팀이 카약을 가지고 있다고 가정하며 vector의 초기값을 1(=팀이 가진 카약 갯수)로 잡는다. 2. 카약을 잃어버린 팀은 v[tmp]--; 하여 카약을 가지고 있지 않은(=0)것으로 만들어준다. 3. 카약 여분을 더 가지고 있는 팀은 v[tmp]++;해준다. 4. for문을 돌리면서 찾아주는데, v[i]==0이면 카약을 가지고 있지 않다는 것이므로 앞팀 뒷팀을 살핀다. 이때 앞팀을 먼저 살핀다! 빌려주면 다시 카약을 가진 갯수를 적절히 설정해준다. 5. 마지막에 v[i]==0이면 참가하지 못하는 팀, result++시켜 답 출력 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 3..

Algorithm/C++ - BOJ 2021.03.02

BOJ/백준 - 2667 단지번호붙이기 C++

1. string으로 받아가면서 2차원 배열에 넣고 2. 방문하지 않았고 map[i][j]==1이라면 dfs/bfs 호출 int dx[4] = { 0,0,-1,1 }; int dy[4] = { 1,-1,0,0 }; 이 배열의 의미는 상,하,좌,우이다. 가운데 점이 현재 위치이라고 했을 때, 현재 기준에서 상 0,1 = dx[0],dy[0] 하 0,-1 = dx[1],dy[1] 좌 -1,0 = dx[2],dy[2] 우 1,0 = dx[3],dy[3] 3. cnt로 집의 갯수를 세고, 오름차순으로 정렬 후 답 출력 1. dfs로 푼 것. 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 ..

Algorithm/C++ - BOJ 2021.03.02

BOJ/백준 - 2606 바이러스 C++

1번 컴퓨터가 바이러스에 걸렸으므로, 1번과 연결되어있는 모든 정점들을 찾아주자. 이때 1번에서부터 시작하니까, 1번을 제외한 나머지 컴퓨터부터 세준다. 1. DFS로 풀기 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 #include #include #include #include #define MAX 101 using namespace std; int N, M, V; vector G[MAX]; int visit[MAX]; int cnt; void dfs(int v) { visit[v] = 1; //cout u >> v;..

Algorithm/C++ - BOJ 2021.02.27