전체 글
-
[c++][구현] 백준 2979번: 트럭 주차알고리즘 2022. 5. 14. 23:58
문제풀이 1. 트럭이 주차되어 있는 개수를 배열을 이용하여 저장한다. 2. 해당 시간에 주자되어 있는 차량의 수에 따라 주차 요금을 계산한다. 코드 #include using namespace std; int main() { int a, b, c; int time[101] = { 0 }; cin >> a >> b >> c; int start, end; for (int i = 0; i > start >> end; for (int j = start; j < end; j++) { time[j]++; } } int result = 0; for (int i = 0; i < 101; i++) { if (time[i] == 1) result += a; else if (time[i] ==..
-
[c++][구현] 백준 10988번: 팰린드롬인지 확인하기알고리즘 2022. 5. 14. 23:47
문제 풀이 1. 입력 받은 문자열을 reverse() 함수를 사용하여 문자열을 뒤집는다. 2. 뒤집은 문자열과 입력받은 문자열의 인덱스 별로 다른 문자가 있는지 찾는다. 3. 다른 문자가 있으면 0을 출력, 아니면 팰린드롬이므로 1을 출력한다. 코드 #include #include using namespace std; int main() { string str; cin >> str; string str2 = str; reverse(str2.begin(), str2.end()); int check = true; for (int i = 0; i < str.length(); i++) { if (str[i] != str2[i]) { check = false; break; } } if (check) cout
-
[c++][그리디] 백준 11508번: 2+1 세일알고리즘 2022. 5. 11. 15:19
문제풀이 1. 유제품 가격을 배열로 저장하여 내림차순으로 정렬을 한다. 2. 내림차순으로 나열된 유제품 가격을 순서대로 3개씩 나눴을 때 세 번째의 가격만 제외하고 모두 더한다. 예) 10, 9, 4, 2, 6, 4, 3 내림차순으로 정렬 -> 10, 9, 6, 4, 4, 3, 2 정렬된 내림차순에서 3개씩 나눠서 생각 -> 10, 9, 6 / 4, 4, 3 / 2 세 번째의 가격만 제외했을 경우 -> 10, 9, 6 / 4, 4, 3 / 2 세 번째의 가격만 제외하고 더하기 =>10, 9, 4, 4, 2만 더하면 최소 비용(=29)으로 유제품을 구입할 수 있다. 코드 #include #include #define MAX 100000 using namespace std; bool compare(int i..
-
[c++][그리디] 백준 1758번: 알바생 강호알고리즘 2022. 5. 10. 23:04
문제풀이 1. 팁을 많이 주는 사람을 앞 순서로 배치했을 때, 강호가 받을 수 있는 팁이 많아진다. 2. 각 사람들이 주려고 하는 팁을 배열에 저장한 후 내림차순으로 정렬을 한다. 3. 정렬된 배열에서 강호에게 줄 팁을 구한다. 이 때 팁이 음수이면 팁을 주지 않는다. 코드 #include #include using namespace std; bool compare(int i, int j) { return i > j; } int main() { int n; int person[100000]; cin >> n; for (int i = 0; i > person[i]; } sort(person, person + n, compare); long long sum = 0; for (i..
-
[c++][그리디] 백준 2217번: 로프알고리즘 2022. 4. 24. 16:16
문제 풀이 1. n개의 로프 정보를 배열에 저장한다. 2. 배열을 오름차순으로 정렬한다. 3. 로프 한 개만 사용했을 때 들어올릴 수 있는 최대 중량을 max에 저장한다. 4. 로프를 여러 개 사용했을 때의 최대 중량은 (로프 중 제일 낮은 중량 * 들어올릴 로프의 개수) 이다. 그래서 로프 배열을 오름차순으로 정렬하고 반복문을 돌면서 최대 중량을 찾는다. 이때 최대 중량이 max보다 크면 max에 저장한다. 코드 #include #include using namespace std; int main() { int n; int rope[100000]; int max = 0; cin >> n; for (int i = 0; i > rope[i]; } sort(rope, rope ..
-
[c++][구현] 백준 20546번: 기적의 매매법알고리즘 2022. 3. 20. 23:13
문제풀이 1. 준현이는 보유한 현금에서 주식을 살 수 있을 경우 즉시 매수를 하고 성민이는 3일 연속 주가 하락 시 매수, 3일 연속 주가 상승 시 매도한다. 코드 #include using namespace std; int main() { int money; cin >> money; int j = money, s = money; // 주식 매수, 매도 후 보유 현금 int j_stock = 0, s_stock = 0; // 보유 주식 수 int stock[14]; // 14일 간의 주가 for (int i = 0; i > stock[i]; // 준현 - 주식을 살 수 있다면 가능한 만큼 즉시 매수 j_stock += j / stock[i]; j = j % stock[i]..
-
[c++][그래프] 백준 1325번: 효율적인 해킹알고리즘 2022. 3. 20. 18:03
문제풀이 1. 'A가 B를 신뢰하는 경우에는 B를 해킹하면, A도 해킹할 수 있다'에서 그래프의 방향을 B -> A 단방향으로 보고 노드를 저장한다. 2. 시작 노드에서 끝 노드까지의 개수를 구해야 하므로 DFS 방식을 이용한다. 3. 노드를 방문할 때 노드의 개수(=check)를 센다. 4. 노드의 개수를 구했을 때 지금까지 구했던 노드의 개수보다 클 경우 이전에 구했던 값들을 지우고 현재 값을 넣는다. 노드의 개수가 이전에 구했던 노드의 개수와 같다면 현재 값도 함께 넣는다. 코드 #include #include #include #include using namespace std; vector graph; vector g; bool visited[10001] = { false }; int check;..
-
[c++][그리디] 백준 1343번: 폴리오미노알고리즘 2022. 3. 17. 15:47
문제 풀이 1. 문자열을 하나하나 살피며 X일 경우 count 증가, 아니면 개수를 세지 않는다. 2. ' . '을 만났을 경우 2 - 1. ' . '을 만나면 폴리오미노로 덮을 수 없기 때문에 count를 0으로 변경한다. 이때 ' . '을 만나기 전에 폴리오미노로 덮을 수 있는 경우가 있을 수 있어 확인해준다. 만약 X의 개수가 2개이면 BB로 덮어준다. 3. X를 만났을 경우 3 - 1. X의 개수가 4개가 되면 AAAA로 덮어주고 count를 0으로 변경한다. 3 - 2. X의 개수가 4개가 되지도 ' . '을 만나지도 않고 문자열이 끝날 경우 3 - 2 - 1. X의 개수가 2개이면 BB로 덮어준다. 4. 위의 과정을 거친 후 문자열에 X가 남아 있으면 -1을 출력하고, 아니면 바꾼 결과를 출력..