πŸ•οΈ ICPC Sinchon/Greedy

[BOJ][C++] λ°±μ€€ 14908번: ꡬ두 μˆ˜μ„ κ³΅ (Gold I)

선달 2025. 2. 10. 23:06
λ°˜μ‘ν˜•

문제

μ§€κΈˆ ꡬ두 μˆ˜μ„ κ³΅μ—κ²ŒλŠ” μ†λ‹˜μœΌλ‘œλΆ€ν„° μ£Όλ¬Έ λ°›κ³  μ œμž‘ν•΄μ•Ό ν•  μž‘μ—…μ΄ N개 μŒ“μ—¬μžˆλ‹€. ꡬ두 μˆ˜μ„ κ³΅μ€ ν•˜λ£¨μ— ν•œ μž‘μ—…λ§Œ μˆ˜ν–‰ν•  수 있고, i번째 μž‘μ—…μ„ μ™„λ£Œν•˜λŠ” 데 Ti일이 κ±Έλ¦°λ‹€. μ΄λ•Œ TiλŠ” μ •μˆ˜μ΄κ³  1 ≤ Ti≤ 1000이닀.
i번째 μž‘μ—…μ„ μ‹œμž‘ν•˜κΈ° 전에 ν•˜λ£¨κ°€ 지연될 λ•Œλ§ˆλ‹€ ꡬ두 μˆ˜μ„ κ³΅μ€ λ³΄μƒκΈˆ Siμ„ΌνŠΈλ₯Ό μ§€λΆˆν•΄μ•Ό ν•œλ‹€. μ΄λ•Œ SiλŠ” μ •μˆ˜μ΄κ³  1 ≤ Si≤ 10000이닀. ꡬ두 μˆ˜μ„ κ³΅μ„ 돕기 μœ„ν•΄ μ΅œμ € λ³΄μƒκΈˆμ„ μ§€λΆˆν•˜λŠ” μž‘μ—… μˆœμ„œλ₯Ό μ •ν•΄μ•Ό ν•œλ‹€.
ν•˜λ£¨μ— 2개 μ΄μƒμ˜ μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•  수 μ—†λ‹€. μž‘μ—… iλ₯Ό μˆ˜ν–‰ν•˜κ³  μžˆλŠ” 경우, μž‘μ—… iλ₯Ό 마칠 λ•Œ κΉŒμ§€ μž‘μ—… i μ™Έμ˜ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μ—†λ‹€.

μž…λ ₯

1 ≤ N ≤ 1000 λ²”μœ„μ˜ μ •μˆ˜ N이 첫 번째 쀄에 주어진닀. λ‹€μŒ N개 쀄에 κ±Έμ³μ„œ 첫 번째 μ—΄μ—λŠ” T1… TN이 μž…λ ₯되며, 두 번째 μ—΄μ—λŠ” S1… SN이 주어진닀.

좜λ ₯

μ΅œμ†Œ λ³΄μƒκΈˆμ„ μ§€λΆˆν•˜λŠ” μž‘μ—… μˆœμ„œλ₯Ό 좜λ ₯ν•΄μ•Ό ν•œλ‹€. λͺ¨λ“  μž‘μ—…μ€ μž…λ ₯μ—μ„œμ˜ 번호(1~N)둜 ν‘œμ‹œν•΄μ•Ό ν•œλ‹€. λͺ¨λ“  μ •μˆ˜λŠ” ν•œ μ€„λ‘œ ν‘œμ‹œν•΄μ•Ό ν•˜λ©°, 각 μž‘μ—…μ€ 곡백 문자둜 κ΅¬λΆ„ν•œλ‹€. μ—¬λŸ¬ 가지 해닡이 λ‚˜μ˜¬ 수 μžˆλ‹€λ©΄ μ˜€λ¦„μ°¨μˆœ 정렬에 μ˜ν•΄ κ°€μž₯ 첫 번째 해닡을 좜λ ₯ν•œλ‹€.

 

풀이

s/t, 즉 λ§ˆκ°ν•˜λŠ” λ‚ μ§œ λ‹Ή λ³΄μƒκΈˆμ„ κΈ°μ€€μœΌλ‘œ κ·Έ λΉ„κ°€ 큰 일 λΆ€ν„° λ¨Όμ € μ²˜λ¦¬ν•΄μ•Όν•œλ‹€

ν•„μžλŠ” tuple을 μ΄μš©ν•΄ μΈλ±μŠ€μ™€ s와 tλ₯Ό λ‹€ λ„£κΈ΄ ν–ˆλŠ”λ°, κ·Έλƒ₯ pair둜 ν•΄μ„œ μΈλ±μŠ€μ™€ s/tλ₯Ό λ°”λ‘œ λ„£λŠ”κ²Œ 훨씬 λ‚˜μ„ 것 κ°™λ‹€.

 

λΉ„μœ¨μ΄ κ°™λ‹€λ©΄ μΈλ±μŠ€κ°€ 더 μž‘μ€κ±Έ λ¨Όμ € λ°°μΉ˜ν•œλ‹€

(문제 λ§ˆμ§€λ§‰ 쀄에 있음.

이거 처리 μ•ˆν•˜λ©΄ 7νΌμ„ΌνŠΈμ—μ„œ ν‹€λ ΈμŠ΅λ‹ˆλ‹€ 뜸)

// 풀이 : https://whkakrkr.tistory.com

#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm>

using namespace std;

typedef tuple<int, int, int> ci;

bool cmp(ci a, ci b) {
    float a_ratio = (float) get<2>(a) / get<1>(a);
    float b_ratio = (float) get<2>(b) / get<1>(b);
    
    if(a_ratio == b_ratio) {
        return get<0>(a) < get<0>(b);
    }
    return a_ratio > b_ratio;
}

int main() {
    ios_base::sync_with_stdio(false);
	cout.tie(NULL);
	cin.tie(NULL);
	
	// input
	int n;
	float t,s;
	cin >> n;
	vector<ci>v;
	for(int i=1; i<=n; i++) {
	    cin >> t >> s;
	    v.push_back(make_tuple(i, t, s));
	}
	
	// solution
	sort(v.begin(), v.end(), cmp);
	
	// output
	for(int i=0; i<n; i++) {
	    cout << get<0>(v[i]) << " ";
	}
	
    return 0;
}
λ°˜μ‘ν˜•