https://www.acmicpc.net/problem/2879
2879번: 코딩은 예쁘게
첫째 줄에 줄의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 현재 줄에 있는 탭의 개수가 주어지며, 1번째 줄부터 순서대로 주어진다. 탭의 개수는 0보다 크거나 같고, 80보다 작거나 같은 정수
www.acmicpc.net
그리디 문제다.
근데 구현 문제 같다.
코드의 인덴트를 맞추는 문젠데 드래그 후 탭을 누르는 횟수를 최소로 만들어야 한다.
탭을 추가해야 하는 경우와 삭제해야 하는 경우를 나눠서 생각했다. (양수와 음수)
추가해야 하는 경우 결과 값과 현재 값의 차이가 양수다.
이 때 이전 값이 음수라면 res에 현재 값을 더해준다.
이전 값이 양수라면 두 가지 경우로 나뉜다.
이전 값보다 현재 값이 크다면 이전 값과의 차이 값을 res에 더해주고
작다면 앞 줄에 포함되는 경우이므로 넘어간다.
세 가지 경우에서 모두 이전 값은 갱신되어야 한다.
빼야하는 경우는 더해야 하는 경우와의 반대다.
#include <iostream>
using namespace std;
int n, res;
int arr[1000];
int result[1000];
int main() {
// 입출력 속도 향상을 위함
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < n; i++) cin >> result[i];
int gap = 0;
for (int i = 0; i < n; i++) {
int tmp = result[i] - arr[i];
if (tmp > 0) {
if (gap < 0) res += tmp;
else {
if (gap >= tmp) gap = tmp;
else res += (tmp - gap);
}
}
else {
if (gap > 0) res -= tmp;
else {
if (gap <= tmp) gap = tmp;
else res += (gap - tmp);
}
}
gap = tmp;
}
cout << res;
}

'Algorithm > Greedy' 카테고리의 다른 글
[Java] BOJ(백준) 2036 수열의 점수 (0) | 2023.09.30 |
---|---|
[C++] BOJ(백준) 1700 멀티탭 스케줄링 (0) | 2023.08.01 |
[C++] BOJ(백준) 7983 내일 할거야 (0) | 2023.07.24 |
[C++] BOJ(백준) 1744 수 묶기 (0) | 2023.03.05 |
[C++] BOJ(백준) 1092 배 (0) | 2023.02.21 |
https://www.acmicpc.net/problem/2879
2879번: 코딩은 예쁘게
첫째 줄에 줄의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 현재 줄에 있는 탭의 개수가 주어지며, 1번째 줄부터 순서대로 주어진다. 탭의 개수는 0보다 크거나 같고, 80보다 작거나 같은 정수
www.acmicpc.net
그리디 문제다.
근데 구현 문제 같다.
코드의 인덴트를 맞추는 문젠데 드래그 후 탭을 누르는 횟수를 최소로 만들어야 한다.
탭을 추가해야 하는 경우와 삭제해야 하는 경우를 나눠서 생각했다. (양수와 음수)
추가해야 하는 경우 결과 값과 현재 값의 차이가 양수다.
이 때 이전 값이 음수라면 res에 현재 값을 더해준다.
이전 값이 양수라면 두 가지 경우로 나뉜다.
이전 값보다 현재 값이 크다면 이전 값과의 차이 값을 res에 더해주고
작다면 앞 줄에 포함되는 경우이므로 넘어간다.
세 가지 경우에서 모두 이전 값은 갱신되어야 한다.
빼야하는 경우는 더해야 하는 경우와의 반대다.
#include <iostream>
using namespace std;
int n, res;
int arr[1000];
int result[1000];
int main() {
// 입출력 속도 향상을 위함
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < n; i++) cin >> result[i];
int gap = 0;
for (int i = 0; i < n; i++) {
int tmp = result[i] - arr[i];
if (tmp > 0) {
if (gap < 0) res += tmp;
else {
if (gap >= tmp) gap = tmp;
else res += (tmp - gap);
}
}
else {
if (gap > 0) res -= tmp;
else {
if (gap <= tmp) gap = tmp;
else res += (gap - tmp);
}
}
gap = tmp;
}
cout << res;
}

'Algorithm > Greedy' 카테고리의 다른 글
[Java] BOJ(백준) 2036 수열의 점수 (0) | 2023.09.30 |
---|---|
[C++] BOJ(백준) 1700 멀티탭 스케줄링 (0) | 2023.08.01 |
[C++] BOJ(백준) 7983 내일 할거야 (0) | 2023.07.24 |
[C++] BOJ(백준) 1744 수 묶기 (0) | 2023.03.05 |
[C++] BOJ(백준) 1092 배 (0) | 2023.02.21 |