알고리즘 49

[백준 6198] 옥상 정원 꾸미기

옥상 정원 꾸미기 문제설명 빌딩의 수를 입력 받고, 각 빌딩의 높이를 입력 받은 뒤, 총 관리인이 옥상정원을 확인할 수 있는 수를 출력한다. 이 때 빌딩은 오른쪽으로만 확인 가능하고, 오른쪽의 빌딩의 높이가 같거나 높으면 더이상 빌딩을 확인할 수 없다. 알고리즘 입력 값들을 입력 받는다 stack을 확인하여 비었는지, 현재 top의 크기가 새로 넣으려는 크기보다 같거나 작은지 판단한다. top의 크기가 같거나 작은 경우 오른쪽으로 볼 수 없는 경우를 의미하니까 pop하여 제거해준다. 새로운 값을 stack 에 넣는다. stack의 크기 -1만큼 정답에 더해준다. 시간초과난 코드 -> 벡터로만 풀었을 때 #include #include #include using namespace std; int main(..

Algorithm 2021.07.29

[백준 7562] 나이트의 이동

나이트의 이동 문제설명 테스트 케이스의 수를 입력받고, 체스판의 크기, 시작점과 도착점을 각각 입력받는다. 그리고 시작점에서 도착점까지 나이트가 이동할 때 최소의 이동 수를 구하여라. 이동 가능한 칸은 사진의 그림과 같다. 알고리즘 테스트 케이스의 수를 입력받고, 필요한 입력을 받는다. bfs함수를 실행한다. 시작점을 queue에 넣고 방문여부를 체크한다. queue가 비기전까지 반복하는데, x,y좌표를 꺼낸다. x,y가 도착점과 일치하면 graph의 해당 좌표 값을 출력한다. 나이트가 이동가능한 경우 8개를 각각 배열에서 read해서 체스판의 범위 확인 후 가능하면 방문한다. 4-6의 과정을 반복하여 방문하고 graph를 갱신해서 값을 출력한다. #include #include #include #inc..

Algorithm 2021.07.29

[백준 1929] 소수 구하기

문제설명 M,N을 입력받고, 그 범위내의 소수를 구해서 출력한다. 알고리즘 N,M을 입력 받는다. bool type의 배열을 N+1만큼 만들고, 1로 초기화 시킨다. 0번째와 1번째는 false로 초기화 해준다. 소수를 구하기 위해서 에라토스테네스의 체 알고리즘을 사용한다. #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int M,N; cin >>M>> N; bool *arr = new bool[N+1]; fill_n(arr, N + 1, 1);//초기화 arr[0] = false; arr[1] = false; for (int i= 2; i

Algorithm 2021.07.29

[백준 11279] 최대 힙

최대 힙 문제설명 첫 줄에 연산의 수를 입력하고, 연산의 수만큼 매 줄마다 정수 x가 입력된다. 0이 입력되면 배열안의 가장 큰 수를 출력하고 지운다. 자연수가 입력되면 배열안에 값을 넣는다. 따라서 0이 나올때 마다 그 결과 값을 출력하면 된다. 만약 배열이 빈 경우 0이 입력되면 0을 출력한다. 알고리즘 연산의 수를 입력 받고 priority_queue를 선언한다. 0이 입력 될 때마다 비어있으면 0, 그렇지 않으면 top을 출력하고 pop해준다. 그 외의 자연수가 입력되면 push해준다. #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL)..

Algorithm 2021.07.29

[백준 11399] ATM

ATM 문제설명 사람의 수를 입력받고, 사람당 걸리는 시간을 입력 받는다. 사람들이 돈을 인출하는데, 최소한의 시간 합을 구해서 출력시켜라. 알고리즘 사람의 수와 각 사람당 걸리는 시간을 입력 받는다. 걸리는 시간을 오름차순으로 정렬한다. 반복문을 사용해서 각 사람이 걸리는 시간을 더해주고, 이전 사람이 걸렸던 시간까지 누적해서 더한다. 결과를 출력한다. #include #include #include #include #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; // 사람수 입력 vector v; while (N) { i..

Algorithm 2021.07.29

[백준 11726] 2xN 타일링

문제설명 n의 값을 입력 받고 타일로 채우는 방법의 수를 출력하는 문제이다. 단, 출력시 10007로 나눈 나머지를 출력시킨다. 알고리즘 n의 값을 입력 받는다. bottom-up방식으로 배열에 값을 저장 하는데 런타임 에러방지를 위해 10007로 나눈 나머지를 저장한다. 해당하는 값을 출력한다. #include #include using namespace std; int main(void) { ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int N; cin >> N; // n값 입력 int arr[1001]; arr[0] = 1; arr[1] = 2; for (int i = 2; i < N; i++) arr[i] = (arr[i - 1] + arr..

Algorithm 2021.07.29

[백준 1620] 나는야 포켓몬 마스터 이다솜

나는야 포켓몬 마스터 이다솜 문제설명 포켓몬의 수 N과 테스트 수 M을 입력받는다. N번 포켓몬의 이름을 입력 받고 M번테스트 할때 포켓몬의 번호가 입력되면 이름을, 포켓몬의 이름이 입력되면 번호를 출력한다. 알고리즘 N,M을 입력받고 포켓몬을 입력받는다. 포켓몬의 이름과 번호를 저장하기 위한 벡터를 pair로 선언하고, 이름만 저장하는 벡터 또한 만든다. 이름과 번호가 저장된 벡터를 정렬해준다. M번 반복해서 숫자인 경우 이름만 저장된 벡터에서 값을 출력하고, 이름이 입력된 경우 이분탐색으로 찾아준다. #include #include #include #include #include #include using namespace std; int N, M; int main() { ios::sync_with_..

Algorithm 2021.07.28

[백준 2630] 색종이 만들기

색종이 만들기 문제설명 정사각형 형태의 색종이의 가로 세로 길이가 입력된다. 이때 항상 N=2^k이다. 색종이 각 칸은 흰색(0) 또는 파란색(1)로 칠해져 있고 종이를 잘랐을 때 모두 같은 색이 아니면 4등분 한다. 이 과정을 더 이상 자를 수 없을 때까지 반복한다. 그리고 흰색 종이의 수와 파란색 종이의 수를 출력한다. 알고리즘 색종이의 가로(=세로)길이를 입력 받고 각 칸마다 흰색은 0 파란색은 1로 입력 받는다. 가로 길이와 0,0을 divide 함수로 전달한다. 만약 num이 1인 경우에는 더 이상 나눌 수 없기 때문에 색깔을 판별하여 올려준다. divide 함수에서는 각 칸의 흰색칸과 파란색 칸의 수를 세어서 현재 함수의 num(가로, 세로)의 제곱 수와 일치하는지 확인한다. 일치하면 더 이상..

Algorithm 2021.07.28

[백준 11866] 요세푸스 문제0

요세푸스 문제0 문제 설명 N,K를 입력 받고 원에서 K번째 사람을 계속 제거한다. 이 때 제거 된 사람의 번호를 출력 시킨다. 알고리즘 값을 입력 받고 , N 만큼 vector에 넣는다. 출력하고자 하는 index라는 변수에 K-1을 더한다. 더하는 동작을 반복문 안에서 반복하다 보면 index범위를 넘어가는 경우가 있기 때문에 벡터의 사이즈 만큼 범위에 해당 되도록 뺀다. index 벡터 값을 출력 시킨다. 벡터에서 해당 변수를 삭제 시킨다. #include #include #include using namespace std; int main() 5 { int num =0,K=0; cin >> num>>K; vector v; for (int i = 0; i < num; i++) v.pus..

Algorithm 2021.07.28

[백준 1003] 피보나치 함수

피보나치 함수 문제 설명 피보나치 함수에서 0과 1이 각각 출력 되는지 결과 값을 출력한다. 이때 T의 수만큼 테스트케이스를 반복하고 N(40까지)의 값을 각각 입력 받는다. 알고리즘 배열에 40까지의 예측 값을 저장해 둔다. 테스트케이스와 0일때 1일때 그 외일 때의 경우로 나누어 출력한다. #include #include #include using namespace std; int main() { int T, N; cin >> T; int arr[41] = {0,1,1}; for (int i = 3; i > N; if (N == 0) cout

Algorithm 2021.07.28