✏️ Algorithm/알고리즘 풀이 51

백준 18808 - 스티커 붙이기 / C++

[문제] https://www.acmicpc.net/problem/18808 18808번: 스티커 붙이기 혜윤이는 최근에 다양한 대회를 참여하면서 노트북에 붙일 수 있는 스티커들을 많이 받았다. 스티커는 아래와 같이 사각 모눈종이 위에 인쇄되어 있으며, 스티커의 각 칸은 상하좌우로 모두 연 www.acmicpc.net [풀이] 시뮬레이션 + 회전 알고리즘 [코드] #include using namespace std; int n, m, k; int note[42][42]; int r, c; int paper[12][12]; // paper를 90도 회전하는 함수 void rotate(){ int tmp[12][12]; for(int i = 0; i < r; i++) for(int j = 0; j < c; ..

백준 15683번 감시 - C++

[문제] https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net [풀이] 백트래킹 + 시뮬레이션 / 4진법을 이용한 방향 탐색 문제 [코드] #include using namespace std; #define X first #define Y second int dx[4] = {1,0,-1,0}; int dy[4] = {0,1,0,-1}; int n,m; int board1[10][10]; int board2[10][10]; vector cc..

백준 1182번 부분수열의 합 - C++

[문제] https://www.acmicpc.net/problem/1182 1182번: 부분수열의 합 첫째 줄에 정수의 개수를 나타내는 N과 정수 S가 주어진다. (1 ≤ N ≤ 20, |S| ≤ 1,000,000) 둘째 줄에 N개의 정수가 빈 칸을 사이에 두고 주어진다. 주어지는 정수의 절댓값은 100,000을 넘지 않는다. www.acmicpc.net [풀이] 백트래킹 문제이다. [코드] #include using namespace std; int n,s; int arr[30]; int cnt; void func(int cur, int tot){ if(cur == n) { if(tot == s) cnt++; return; } func(cur+1, tot); func(cur+1, tot+arr[cur]..

백준 15649번 - N과 M(1) - C++

[문제] https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해 www.acmicpc.net 백트래킹 문제이다. [코드] #include using namespace std; int n,m; // 3, 1인 경우 int arr[10]; bool isused[10]; void func(int k) // 3 1 인 경우 { if(k == m) { for(int i=0; i

백준 2447번 - 별 찍기 - 10 (C++)

[문제] https://www.acmicpc.net/problem/2447 2447번: 별 찍기 - 10 재귀적인 패턴으로 별을 찍어 보자. N이 3의 거듭제곱(3, 9, 27, ...)이라고 할 때, 크기 N의 패턴은 N×N 정사각형 모양이다. 크기 3의 패턴은 가운데에 공백이 있고, 가운데를 제외한 모든 칸에 별이 www.acmicpc.net [풀이] 재귀 함수로 푸는 문제이다. (0,0) 좌표에서 시작하여, N/3씩 이동한 뒤 좌표를 다시 start 함수에 넣는다. 빈 칸을 만들기 위해서 i%N/(N/3), j%N/(N/3)이 1인 경우가 빈칸으로 만들었다. [코드] #include using namespace std; char map2[10000][10000]; void draw(int x, in..

1992번 - 쿼드트리 (C++)

[문제] https://www.acmicpc.net/problem/1992 1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또 www.acmicpc.net [풀이] 이전 문제와 똑같이 재귀함수로 푸는 문제이다. vector를 이용하여 쿼드트리를 저장하였음. test함수에서 모두 0, 1로 되어있는지 판단하고, 아니면 false, 맞으면 true 값을 반환하였다. true인 경우 1 혹은 0을 벡터에 넣어 쿼드 트리 완성, 괄호는 재귀함수에 넣을때 같이 벡터에 넣어주었고 숫자 사이에 괄호를 없애서 문제를 풀었다. [코드] #inc..