백준: Silver④ - 1427, 1436, 1439, 1475

1 분 소요


</br> 계속 풀이
</br>

1427: 소트인사이드

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

수의 각 자리수를 정렬하기

    string n;
    cin >> n;

    sort(n.begin(), n.end(), greater<>());

    cout << n << endl;

c++엔 너무 좋은 함수가 있어요
</br>

1436: 영화감독 숌

https://www.acmcpc.net/problem/1436

666이 들어가는 n번째로 큰 수 구하기

    int cnt = 0;
    string ans;
    for(int i = 666; cnt < n; i++){
        ans = to_string(i);
        for(int j = 0; j < ans.size()-2; j++){
            if( ans[j] == '6' && ans[j+1] == '6' && ans[j+2] == '6' ){
                cnt++;
                break;
            }
        }
    }
    cout << ans << endl;

그냥 1씩 늘리면서 666 있는 지 확인하니까 시간도 널널하고 바로 통과
</br>

1439: 뒤집기

https://www.acmcpc.net/problem/1439

1100111 같은 거 뭉탱이로 뒤집어서 다 똑같이 만들기 ex) 1100111 -> 00 뒤집기 -> 1111111

    s += s[s.size()-1];
    int cnt0 = 0, cnt1 = 0;
    for(int i = 0; i < s.size(); i++){
        if( s[i] != s[i+1] ){
            if( s[i] == '0' ) cnt0++;
            else cnt1++;
        }
    }

    cout << min(cnt0, cnt1) << endl;

이것도 벌써 세 번째 같은데 0과 1이므로 한 번만 뒤집어 준다
0의 덩어리 개수와 1의 덩어리 개수를 세고, 적은 쪽을 뒤집어 주면 된다.
</br>

1475: 방 번호

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

숫자 세트(0~9)를 사서 방 번호 만들기, 6과 9는 혼용 가능

    for(int i = 0; i < s.size(); i++){
        numset[s[i]-'0']++;
    }
    numset[6] += numset[9];
    numset[6] = (numset[6]+1) / 2;

    int ans = 1;
    for(int i = 0; i < 9; i++){
        ans = max(ans, numset[i]);
    }

    cout << ans << endl;

numset[]에 각 숫자마다 개수를 저장한다.
6에 9의 개수까지 더하고, 이를 2로 나눈 것을 1을 더하여 저장한다.
numset[]에서 가장 큰 것을 찾으면 그 만큼 숫자세트가 필요하다는 뜻이므로 출력해 준다. 생각해 보니까 max_element()를 왜 안 썼지
</br>


난이도가 너무 쉬운 건지 좀 실력이 나아진 건지 한 방에 잘 통과한다
</br>

댓글남기기