Algorithm 102

[백준 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

[백준 11723] 집합

집합 문제설명 첫 줄에 명령의 수를 입력 받고, 위의 사진대로 명령이 수행되도록 구현한다. 알고리즘 입력할 명령어의 수를 입력 받는다. 각 명령어 별로 확인을 하고 알맞은 수행을 한다. 시간 절약을 위해서 직접 값을 찾지 않고, 값의 범위가 1~20이므로 배열에 존재하면 1, 그렇지 않으면 0으로 표기하여 수행한다. #include #include #include #include #include #include using namespace std; int main(void) { int N; cin >> N; int v[21] = { 0, }; ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); while (N)//회의실 정보 입력받기 { string s; ..

Algorithm 2021.07.29

[백준 1931] 회의실 배정

회의실 배정 문제설명 회의의 수를 입력 받고, 각 회의마다 시작시간과 종료시간을 입력 받는다. 최대한 많은 회의를 선택하여 그 갯수를 출력하면 된다. 알고리즘 필요한 입력 값들을 모두 입력 받는다. 벡터에 담아 정렬하되, 종료시간을 기준으로 오름차순으로 정렬한다. 정렬한 벡터를 차례대로 조회하여 현재 회의 종료시간이 다음 회의 시작 시간과 겹치는지 확인하고 겹치지 않으면 선택한다. 선택할 때 회의의 수를 카운트하고 조회가 끝나면 그 수를 출력한다. #include #include #include #include #include using namespace std; bool cmp(const pair &a, const pair &b) { if (a.second == b.second)//종료시간이 같으면 r..

Algorithm 2021.07.29

[백준 1541] 잃어버린 괄호

잃어버린 괄호 문제설명 첫 줄에 수식을 입력받고 괄호를 마음대로 배치해서 최대한 작은 값을 만들어 출력한다. 알고리즘 수식을 입력 받는다. 뺄셈 부호를 만나면 체크 할 수 있도록 확인하는 bool형 변수와 숫자를 담을 수 있는 변수를 만든다. 수식을 각각 읽으면서 부호를 만나거나, 문장의 끝부분을 만나면 sum이라는 결과를 저장하는 변수에 연산을 진행한다. 문자열 처리중에 -를 만나면 bool형 변수를 true로 변경시킨다 반복문 내에서 부호나 문장의 끝부분을 만나지 않은 경우에는 string형 temp 변수에 저장한다 bool형 변수가 true인 경우 모두 뺄셈을 진행하고 그렇지 않은 경우 덧셈을 진행한다 결과 값을 출력한다. #include #include #include #include using ..

Algorithm 2021.07.29

[백준 1181] 단어 정렬

단어 정렬 문제설명 단어의 수를 입력받고 정렬한다. 조건1) 길이가 짧은 것 부터 조건2) 길이가 같으면 사전순으로 조건에 따라 정렬하고 중복 된 단어는 한 번만 출력한다. 알고리즘 단어의 수를 입력 받고, 단어도 입력 받는다. 벡터에 단어와 단어 길이 또한 같이 저장한다. cmp함수로 정렬한다. unique를 활용하여 중복되는 단어는 지운다. 벡터를 출력한다. #include #include #include #include #include #include using namespace std; bool cmp(const pair &a, const pair &b) { if (a.second == b.second)//단어의 글자 수가 같으면 return a.first < b.first;//사전순 return..

Algorithm 2021.07.29

[백준 9095] 1,2,3 더하기

1,2,3 더하기 문제설명 테스트 케이스 수를 입력 받고, 구하고자 하는 수를 입력 받은 뒤 그 정수를 1,2,3의 합으로 나타내는 총 방법의 수를 출력하라. 그리고 그 동작을 테스트 케이스 수만큼 반복한다. 알고리즘 테스트케이스와 구하고자 하는 수를 입력 받는다. 초기값을 저장한다. 연산에 필요한 만큼 반복문을 통해서 미리 계산한다. 값을 조회하여 알맞은 부분을 출력시킨다. #include #include #include using namespace std; int main(void) { int T; cin >> T;//테스트 케이스 수 입력 while (T) { int N;//계산하고자 하는 수 입력 int dp[12]; cin >> N; //초기값 dp[0] = 1; dp[1] = 2; dp[2] ..

Algorithm 2021.07.29