백준: Silver① - 1181, 1205, 1246

2 분 소요


</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>

댓글남기기