끄적끄적 코딩
article thumbnail
[C++] 백준 10953번 A+B - 6
알고리즘 2019. 9. 8. 23:13

덧셈 문제입니다. 입력받는 A,B를 string으로 받아서 다시 A, B에 넣어주어서 더해주었습니다. #include #include using namespace std; int main(int argc, char *argv[]) { int n; int a, b; string s; cin >> n; for (int i = 0; i > s; a = s[0] - '0'; b = s[2] - '0'; cout

article thumbnail
[C++] 백준 1629번 곱셈
알고리즘 2019. 9. 8. 18:21

분할정복 문제입니다. (A^B) % C를 출력하면 됩니다. B를 전부 하나하나 곱하면은 시간초과가 날 수 있습니다. 2^4의 경우 4^2와 동일합니다. 2^8의 경우 4^4 16^2와 동일합니다. 이처럼 2로 나누어 떨어질 경우 그 수로 곱한 후 승수를 2로 나눈 만큼 제곱하면 됩니다. #include using namespace std; int A, B, C; int divCon(int n, int k) { int result; int x; if (k == 0) { return 1; } x = divCon(n, k / 2); result = 1LL * x * x % C; if (k % 2) { result = 1LL * result * n % C; } return result; } int main(in..

article thumbnail
[C++] 백준 1780번 종이의 개수
알고리즘 2019. 9. 8. 16:53

분할정복 문제입니다. 사각형에서 모든 숫자가 같으면 그 숫자에 대해서 카운트를 증가합니다. 다를 경우에 사각형을 9조각으로 나누어서 위의 작업을 반복합니다. 최종적으로 -1, 0, 1이 총 몇개의 사각형으로 이루어져있는지 출력합니다. 시작점 위치의 값을 check에 넣고 반복문을 통해서 다른 값들과 비교합니다. 다를경우 check=2로 바꾸고 9조각으로 나눠서 작업을 반복합니다. 같을 경우 check의 값에 따라 해당하는 카운트를 증가시켜줍니다. #include #include #include #include using namespace std; int c[3]; int map[3000][3000]; void divCon(int n, int m, int x) { int check = map[n][m]; ..

article thumbnail
[C++] 백준 1992번 쿼드트리
알고리즘 2019. 9. 8. 15:03

분할정복 문제입니다. 사각형이 전부 흰색이면 0, 전부 검정색이면 1을 출력합니다. 사각형 안의 색이 여러개라면 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래로 4방면으로 분할해서 위의 과정을 반복합니다. 분할 할 때 '('를 출력해주고, 분할이 끝났을때 ')'을 출력해줍니다. #include #include #include #include using namespace std; int map[130][130]; void divCon(int ns, int ms, int ne, int me) { int check = map[ns][ms]; for (int i = ns; i < ne; ++i) { for (int j = ms; j < me; ++j) { if (check == 0 && map[i][j] ==..

article thumbnail
[C++] 백준 2630번 색종이 만들기
알고리즘 2019. 9. 8. 14:34

분할 정복 문제입니다. 색종이의 색이 다 같을 때 까지 색종이를 4조각으로 자를 때 흰색 종이와 파란색 종이의 개수를 구해야합니다. 함수에 파라미터를 (x시작 지점, y시작 지점, x끝 지점, y끝 지점) 으로 하였습니다. 그리고 종이안의 색을 비교해서 다른것이 있다면 4조각으로 잘라서 다시 함수를 실행해줍니다. xs = x의 시작지점 ys = y의 시작지점 xe = x의 끝지점 ye = y의 끝지점 func(xs, ys, (xs+xe)/2, (ys+ye)/2) // 왼쪽 위 func((xs+xe)/2, ys, xe, (ys+ye)/2) // 오른쪽 위 func(xs, (ys+ye)/2, (xs+xe)/2, ye) // 왼쪽 아래 func((xs+xe)/2, (ys+ye)/2, xe, ye) // 오른쪽..

article thumbnail
[C++] 백준 5430번 AC
알고리즘 2019. 9. 8. 04:36

덱 문제입니다. 숫자를 덱에 입력받고 함수를 실행 했을 때의 결과값을 출력해야합니다. R = 숫자들 뒤집기 ex) 1234 -> 4321 D = 앞의 문자 제거 ex) 1234 -> 234 deque가 비어있는데 D함수 실행시 -> "error" 출력 덱에 모든 값을 다 넣고 R을 입력받으면 reverse = !reverse를 해주어서 reverse가 true면 D함수에 대해 pop_back() reverse가 false면 D함수에 대해 pop_front()를 해주었습니다. 비어있는데 D함수 실행시 error를 true로 해주었습니다. reverse가 true면 d.back()을 이용해 뒤에서 부터 출력하고 reverse가 false면 d.front()를 이용해 앞에서 부터 출력했습니다. #include..

article thumbnail
[C++] 백준 1021번 회전하는 큐
알고리즘 2019. 9. 8. 03:53

덱 문제입니다. 원형 큐에서 M개의 수를 빼낼때 최소 걸리는 횟수를 구하는 문제입니다. 좌, 우로 움직일 수 있으며 front를 뺄때는 횟수가 증가하지 않습니다. 1. 덱에 1~N까지의 값을 넣습니다. 2. 찾아야하는 숫자의 인덱스 번호를 확인합니다. 3. 인덱스 번호를 통해 왼쪽으로 가는 경우와 오른쪽으로 가는 경우에 대해서 빠른 경로를 찾습니다. 4. 빠른 방향으로 이동하면서 횟수만큼 카운트를 증가합니다. 5. 찾은 수를 pop시킵니다. 6. 찾는 수들을 다 찾을 때 까지 2~5를 반복합니다. #include #include #include #include #include using namespace std; int main(int argc, char *argv[]) { int n; int find;..

article thumbnail
[C++] 백준 10866번 덱
알고리즘 2019. 9. 8. 01:30

덱 문제입니다. 덱에 대한 함수를 만들어서 그에 대한 결과값을 출력해주면 됩니다. #include #include #include #include using namespace std; deque d; void push_front_(int x) { d.push_front(x); } void push_back_(int x) { d.push_back(x); } int pop_front_() { if (d.empty()) { return -1; } else { int num = d.front(); d.pop_front(); return num; } } int pop_back_() { if (d.empty()) { return -1; } else { int num = d.back(); d.pop_back(); r..

검색 태그