본문 바로가기

Problem solving70

[BOJ] 2493. 탑 (C++) 문제 일직선 위에 N개의 높이가 다른 탑을 세우고, 꼭대기에 송신기를 설치했다. 하나의 탑에서 신호는 왼쪽 수평 방향으로 발사하고, 가장 먼저 만나는 하나의 탑에서만 수신이 가능하다. 탑의 개수 N, 각각의 높이가 주어질 때, 각각의 탑에서 발사한 레이저 신호를 어느 탑에서 수신하는지 출력 수신하는 탑이 존재하지 않으면 0을 출력 생각할 것 탑 높이를 스택에 넣으면서 자기보다 높으면 유지, 낮으면 없애기 → push, pop연산이 N번만 이루어질 수 있음 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, h; cin >> N; st.. 2023. 8. 11.
[BOJ] 1182. 부분수열의 합 (C++) 문제 N개의 정수로 이루어진 수열이 있을 때, 크기가 양수인 부분수열 중에서 그 수열의 원소를 다 더한 값이 S가 되는 경우의 수 생각할 것 종료 조건에 부분수열 원소 개수는 상관없고 더한 값만 필요하므로 방문 체크를 하지 않았다. 모든 조합을 확인해야한다. ⇒ 부분 수열을 만들때, 해당 원소가 들어가는지 안들어가는지 여부로 판단한다! 코드 #include #include using namespace std; int N, S, res = 0; vector num; void dfs(int idx, int sum) { // 결괏값 확인 if (idx == N) return; // 모든 수를 다 확인한 경우 if (sum + num[idx] == S) res++; // 정답인지 확인 // 아니면 다음 인덱스로.. 2023. 8. 8.
[BOJ] 11047. 동전 0 (C++) 문제 N종류의 동전을 사용해 K의 값을 만들 때 필요한 동전을 최소화하기 동전의 가치가 오름차순으로 주어진다 생각할 것 가지고 있는 동전을 최소화해야 하므로 큰 단위의 동전을 나눌 수 있는 만큼 최대한 나눈다. → 그리디 알고리즘을 이용한다. 코드 #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, K; cin >> N >> K; vector vec(N); // 동전 가치 for (int i = 0; i > vec[i]; } int coin = 0; for (int i = N - 1; i >= 0; i--) { if (K >.. 2023. 8. 8.
[BOJ] 1149. RGB거리 (C++) 문제 1번 집부터 N번 집이 순서대로 있다. 집은 RGB 중 하나의 색으로 칠해야 한다. 각각의 집을 빨강, 초록, 파랑으로 칠하는 비용이 주어졌을 때, 아래 규칙을 만족하면서 모든 집을 칠하는 최솟값은? 1번 집의 색은 2번 집의 색과 같지 않아야 한다. N번 집의 색은 N-1번 집의 색과 같지 않아야 한다. i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다. 생각할 것 3가지 조건을 모두 반영해보자 표를 만들어서 풀었다 집 번호 / RGB R G B 0 26 40 83 1 40(0번집 G) + 49(1번집 R) = 89, 83(0번집 B) + 49(1번집 R) = 132 따라서 89 기록 26 + 60, 83 + 60 => 86 26 + 57, 40 + 57 =>.. 2023. 8. 8.