![[백준 C++] 2630 : 색종이 만들기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FIrCkf%2FbtsMw4gBxzt%2FAAAAAAAAAAAAAAAAAAAAAL-vNzcIJGBhxfFsSN4R8C6VHZ0f8i1dC7O3rV9OgjGQ%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3D1DgQ%252FiWFdxEK%252Bkqd3Xw5t4uSscA%253D)
https://www.acmicpc.net/problem/2630예시로 주어진 사진과 함께 생각해보면 2의 배수로 주어지는 N이 나눌때마다 2 / N로 계속 줄어드는 것을 볼 수 있다. 즉 첫 시작점만 정해주게 되면 줄어드는 값을 더해 끝점을 구할 수 있고, 시작점과 끝점 안에 있는 내용을 확인하여 색이 모두 일치하는지 보면 된다.#include #include using namespace std;int N;vector> board;vector answer;void solve(int sX, int sY, int size){ if (size == 0) return; bool bClear = true; int color = board[sY].at(sX); for (int y = sY; y > N; boar..
![[백준 C++] 11727 : 2×n 타일링 2](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FkNuq7%2FbtsMuv0uFfb%2FAAAAAAAAAAAAAAAAAAAAADyAZLj7kGYoqgu440T33yNBXOSh0s-T9FTS1Uo5sBQj%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DSsT62sVT6pdvS6ZyT4cRMpjMJzU%253D)
https://www.acmicpc.net/problem/11727이전 글과 마찬가지로 규칙을 찾았다. N이 1일때 1, 2일때엔 3, 3일때엔 5, 4일때엔 11..짝수일 때에는 전 수의 2배 + 1, 홀수일 때에는 전 수의 2배 - 1로 되어 이 식을 적용하였다.#include #include using namespace std;int main(){ vector list; int n; cin >> n; list.push_back(0); list.push_back(1); for (int i = 2; i
![[백준 C++] 11726 : 2×n 타일링](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FdfdYOU%2FbtsMtekfsGA%2FAAAAAAAAAAAAAAAAAAAAAG_rVJpZnd2VQiMCQnmoie4eL4Kl0H7n2Jaur6EX7uMD%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DWEU2rrqULTf6ChDVkcieZ7tDjHs%253D)
https://www.acmicpc.net/problem/11726규칙을 찾아내면 된다. N이 1일 때엔 방법이 한 개. N이 2일 때엔 방법이 2개, N이 3일 때엔 방법이 3개 ....좀 진행해보면 이전 두 수를 더한 값이 정답이라는 것을 알 수 있다.#include #include using namespace std;int solve(int N){ vector list = vector(1001, -1); list[1] = 1; list[2] = 2; for (int i = 3; i > N; cout
![[백준 C++] 9375 : 패션왕 신해빈](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbtozRG%2FbtsMuK9WNsw%2FAAAAAAAAAAAAAAAAAAAAAIRTjfCsOffMlwTHDn2ZDDvEC6FowFip6kIJ_kCED0oS%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DXcgeHthaw5HlByaiP%252F39W4Sa0kA%253D)
https://www.acmicpc.net/problem/9375 종류에 따라 만들 수 있는 조합의 갯수를 찾아야한다. 예를 들어 모자가 2개, 바지가 3개 있다고 했을 시 가능한 방법은(모자1, 모자2, 모자X) * (바지1, 바지2, 바지3, 바지X) 으로 조합을 만들 수 있다.다만, 모두 입지 않은 경우는 제외해야 하기 때문에 모자X와 바지X를 입은 경우를 빼 주어야 정답이 된다.#include #include using namespace std;int solve(){ map list; int value, answer = 1; cin >> value; for (int i = 0; i > name >> type; if (list.find(type) == list.end()) list.insert..
![[백준 C++] 9095 : 1, 2, 3 더하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbBkmVK%2FbtsMuxCPdfW%2FAAAAAAAAAAAAAAAAAAAAAAb_Mn6eg8QR3bO7kMyFoCYqeGth1X554JGt9Q9OkWxb%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DIp%252FOz04bZlGZVM0m4JGX66cwZWs%253D)
https://www.acmicpc.net/problem/9095DP는 점화식. 1과 2, 3으로 구성되어 나타내는 방법을 구하는 문제이다.점화식을 생각해 내는 것이 어렵지만 1, 2, 3을 사용하는 점을 생각하여 도출해 내야 한다.#include #include using namespace std;vector answer = vector(12, -1);void cal(){ answer[1] = 1; answer[2] = 2; answer[3] = 4; for (int i = 4; i > T; cal(); for (int i = 0; i > input; cout 하나의 수에 대해 방법을 구할 때에 처음에 1이 오게 되면, 남은 숫자는 N - 1의 방법 합이 된다.2가 오게 되면, 남은 숫자는 N - 2..
![[백준 C++] 2579 : 계단 오르기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbVrA90%2FbtsMsUeOJAA%2FAAAAAAAAAAAAAAAAAAAAAA_iaWos_DiFVKxgqDIIs525yO-VipgHd0bDO9haqBqr%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DLyEJXO6UTGcVBjdGnfAcJfFPAsI%253D)
https://www.acmicpc.net/problem/2579다이나믹 프로그래밍을 이용해서 풀어야 하는 문제이다. #include #include using namespace std;vector stair;vector answer;int num;void init(){ cin >> num; answer = vector(num + 1, -1); stair = vector(num + 1, -1); for (int i = 1; i > temp; stair[i] = temp; }}void solve(){ answer[1] = stair[1]; answer[2] = answer[1] + stair[2]; answer[3] = max(stair[1] + stair[3], stair[2] + stair[3]); ..
![[백준 C++] 1620: 나는야 포켓몬 마스터 이다솜](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbgP8la%2FbtsMtbto3BC%2FAAAAAAAAAAAAAAAAAAAAACTutOhJFIpZw3bz87XIX6N8wL2aEbiHth3MyBhR_h_a%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DZ3XcueDMlsJPJ81uebqCYcHbswA%253D)
https://www.acmicpc.net/problem/1620시간초과에 걸리지 않기 위해서 해시 맵을 사용해야 한다. #include #include #include #include using namespace std;int main(){ vector answer; vector nameList; map idxList; int M, N; cin >> M >> N; for (int i = 0; i > str; nameList.push_back(str); idxList.insert(make_pair(str, i + 1)); } for (int i = 0; i > str; if (str[0] >= 'A' && str[0] second)); else answer.push_back(nameList[s..
![[백준 C++] 7576 : 토마토](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FbBmbmU%2FbtsMs5TMaOU%2FAAAAAAAAAAAAAAAAAAAAACC9ZBhcGJTHA6VPKQsncUfgsAl8DxVjrQxLb5uCE7Fg%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1753973999%26allow_ip%3D%26allow_referer%3D%26signature%3DlKOBzR%252FrYbE96Ea7AozqoZRIxhM%253D)
https://www.acmicpc.net/problem/7576BFS로 푸는 문제고, 시간초과에 유의해야 한다. visted를 bool로 하지 않고 int값으로 하여, 이 전에 있던 곳에서 +1을 해 날짜를 더해나가는 방식으로 구현하였다.#include #include #include using namespace std;int x, y, answer = 0;vector> list;vector> visited;int dx[4] = { -1 , 0, 1, 0 };int dy[4] = { 0, 1, 0, -1 };void init(){ int input; cin >> x >> y; list = vector>(y, vector(x, 0)); visited = vector>(y, vector(x, 0)); fo..