백준: Silver① - 1181, 1205, 1246
</br>
이제 골드를 풀까 실버들을 좀 더 풀까 생각했는데, 내가 정답률이 좀 낮은 편이었다. n 범위가 뭐고 이런 거 잘 안 보고 그냥 막 제출해서…
그래서 일단 정확도를 높인 다음에 골드를 풀자 싶어서 실버에서 문제 제대로 읽기를 더 다지고 가야겠다 싶더라.
지금 40퍼도 안 되는데, 일단 40퍼는 당연하고 45퍼 정도는 찍어야 겠다.
목표는 원 샷 원 킬
</br>
1181: 단어 정렬
https://www.acmicpc.net/problem/1181
단어들 짧은 순, 알파벳 순으로 정렬하기
bool cmp(string &s1, string &s2){
if( s1.size() == s2.size() ){
return s1 < s2;
}
return s1.size() < s2.size();
}
// in main()
set<string> st;
vector<string> v;
for(int i = 0; i < n; i++){
string s;
cin >> s;
st.insert(s);
}
for(string s : st){
v.push_back(s);
}
sort(v.begin(), v.end(), cmp);
for(string s : v){
cout << s << endl;
}
같은 단어 여러 번 입력되면 하나만 출력한다는 조건을 또 안 보고 풀어서 한 번 틀렸다…
cmp 함수만 그냥 짜 주면 된다.
그리고 지금 검색해 봤는데, set을 vector로 변환할 때
vector<char> v(s.begin(), s.end());
https://www.techiedelight.com/convert-set-vector-cpp/ 일케 해주는 게 가장 우아한 솔루션이라고 한다
vector<char> v(s.size());
copy(s.begin(), s.end(), v.begin());
이것도 봐두면 좋을 듯
</br>
1205: 등수 구하기
https://www.acmcpc.net/problem/1205
이 점수로 몇 등인 지 구하기
if( n == 0 ){
if( p == 0 ) cout << -1 << endl;
else cout << 1 << endl;
return 0;
}
vector<int> v;
for(int i = 0; i < n; i++){
int a;
cin >> a;
v.push_back(a);
}
int cnt = 0, ans = 1;
for(int i = 0; i < v.size(); i++){
if( v[i] > s ) ans++;
else if( v[i] < s ) break;
cnt++;
}
if( cnt == p ) ans = -1;
cout << ans << endl;
문제 이해를 잘못해서 정답률을 오히려 깎아 먹었다 참내~
정렬된 채로 들어온다. 만약 이 점수가 송씨의 점수보다 크면 등수가 밀리는 것이므로 1씩 더한다. 작으면 송씨가 들어갈 자리 이므로 break한다.
만약 카운트가 p와 같으면 송씨가 들어갈 수 없으므로 -1을 출력한다.
</br>
1246: 온라인 판매
https://www.acmcpc.net/problem/1246
달걀 최대한 잘 팔기
sort(v.begin(), v.end());
int price = 0, ans = 0;
for(int i = max(0, m-n); i < m; i++){
int tmp = v[i] * (m-i);
if( tmp > ans ){
ans = tmp;
price = v[i];
}
}
cout << price << ' ' << ans << endl;
낮은 순으로 구매가를 정렬한다.
사고 싶은 사람이 계란의 개수보다 많아도 다 팔 수 없으므로, max(0, m-n)
를 사용했다.
현재 구매가로 팔 때의 이익을 비교해서 저장하고, 출력하면 끝
</br>
오히려 더 까먹은 거 같은데?? 좀 더 풀면 높아지겠지
</br>
댓글남기기