본문 바로가기

Problem solving/BOJ29

[BOJ] 2230. 수 고르기 (C++) 문제 N개의 정수로 이루어진 수열 중 두 수를 골랐을 때(같은 수일 수도 있음) 차이가 M이상이면서 제일 작은 경우를 구하기 생각할 것 배열을 정렬하고, 투포인터를 이용해보기 start, end를 가장 처음에 둔다. (같은 수일 수도 있으므로) 차이가 M보다 작으면 키우기 위해 end를 옮기고, 크면 start를 옮긴다. res의 초기 값을 res[N-1] - res[0]으로 설정해야한다. 코드 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int N, M; cin >> N >> M; vector vec(N); for (int i = 0; i <.. 2023. 8. 11.
[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.