WINK-(Web & App)/알고리즘 스터디

[2025 1학기 알고리즘 스터디] 김민주 #3주차

mjello 2025. 5. 7. 23:55
반응형

알고리즘 스터디 3주차 : 그리디 알고리즘

 

1. 회의실 배정

https://www.acmicpc.net/problem/1931


💡문제 분석 및 알고리즘 설계

가장 대표적인 그리디 문제인 회의실 배정은 최초 아이디어만 떠올리면 구현하기는 어렵지않은 것 같습니다.

(근데 이제 처음에는 절대 생각안나는 ㅠㅡㅠ)

저는 이미 풀이 방법을 알고있어서 바로 구현해봤습니다.

 

회의 시작시간과 끝나는 시간을 pair로 갖도록 배열을 생성하고,

끝나는 시간을 비교해서 최대 회의가 가능하도록 알고리즘을 설계했습니다.

 

#include <stdio.h>
#include <algorithm>
#include <iostream>

using namespace std;

int n, a, b;
int num =1;
pair <int,int> arr[100001];

int main(){
    cin >> n;

    for (int i=0; i<n; i++){
        cin >> a >>b;
        arr[i] = {b,a};
    }
    sort(arr, arr+n);

    int f = arr[0].first;

    for (int i=1; i<n; i++){
        if (f <= arr[i].second){
            num +=1;
            f = arr[i].first;
        }
    }
    cout << num;
}

 

2. 잃어버린 괄호

https://www.acmicpc.net/problem/1541


💡문제 분석 및 알고리즘 설계

연산 식에 괄호를 추가해야하는 이 문제는 파이썬으로 풀었습니다

지금 자료구조 재수강....... 중이라 파이썬으로 스택, 큐 등을 구현하면서

이런 연산 문제들에 많이 익숙해졌기 때문입니다 ㅜ_ㅜ

 

그리디인만큼 모두 연산할 수 있도록 길이만큼 for문을 돌아줍니다.

 

n = str(input())
data = n.split('-')

nums = []

for i in data:
    sum = 0
    tmp = i.split('+')
    for j in tmp :
        sum += int(j)
    nums.append(sum)

num = nums[0] 

for i in range(1,len(nums)) :
    num -= nums[i]
print(num)

 

3. 동전 0

https://www.acmicpc.net/problem/1931


💡문제 분석 및 알고리즘 설계

동전 개수의 최소값을 구하는 문제입니다.

이 문제가 그리디인걸 몰랐다면 다른 방법을 찾기위해 헤맸을거 같은데

그리디인걸 알고 푸니까 오히려 생각안하고 for문을 돌도록 한 것 같습니다.

 

#include<iostream>
using namespace std;

int coin[10];
int n, k;
int cnt = 0;

int main(){
	cin >> n >> k;

	for (int i = 0; i < n; i++){
		cin >> coin[i];
	}
    
	for (int i = n-1; i >= 0; i--){
		if (coin[i] <= k){
			cnt += k /coin[i]; 
			k %= coin[i];
		}
	}
	cout << cnt;
}

 

반응형