-

1475 본문

Algorithm/Baekjoon

1475

Boogallee 2018. 1. 4. 14:20

틀린 코드:


틀린 이유느 1123699 입력이 있으면 2가 나와야하는데 3이나온다. 이유는 아래 알고리즘에 따라 단순하게 같은 숫자가 나오거나 6과 9의 경우 cnt를 증가시켰기 때문이다. 


#include <iostream>

#include <vector>

using namespace std;



int main()

{


    int check_1=0;

    int n;

    int num=0,i=0,cnt=1;

    cin>>n;


    num = n;

    while(num>0)

    {

        num /= 10;

        i++;

    }

    int arr[i]; i=0; num = n;

    while(num>0)

    {


        arr[i++] = num%10;


        if(arr[i-1] == 6 || arr[i-1] == 9)

        {

            check_1++;

            if(check_1 %2 != 0 && check_1 > 2)

            {


                cnt++;  // this point

            }

        }


        for(int j=0; j<i-1; j++)

        {

            if(arr[j] == arr[i-1])

            {

                if(arr[j]==6 || arr[j]==9) continue;

                cnt++;

            }

        }

        num /= 10;

    }


    cout<<cnt;

    return 0;

}




해설을 잘 살펴보니 생각지 못한 풀이였다.



int check[10];

string str;

    getline(cin, str);


    for (int i = 0; i < str.size(); i++)

    {

        check[str[i] - '0']++;

    }


1. 입력을 받는데 굳이 자릿수별로 나누어서 루프를 돌 필요가 없다.
2. 6이나 9로 통일 시킨다. 그리고 6이나 9의 개수를 계산. 
3. 10개 요소를 가진 배열을 사용.

입력된 숫자들에 해당하는 인덱스 증감을 이용.

그중에서 가장 큰 값이 해답.


#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int check[10];
int main()
{
    string str;
    getline(cin, str);

    for (int i = 0; i < str.size(); i++)
    {
        check[str[i] - '0']++;
    }

    int max= -1;
    
    check[6] = check[6]/2 + check[6]%2;
    max = check[6];
    for (int i = 0; i < 10; i++)
    {
        if (i == 6 || i == 9) continue;
        max = max(max, check[i]);
    }

    cout << max << endl;
    return 0;
}


'Algorithm > Baekjoon' 카테고리의 다른 글

2750 - 버블정렬  (0) 2018.01.09
6064 카잉달력  (0) 2018.01.09
2775  (0) 2018.01.03
10250  (0) 2018.01.03
1011(다른 방법으로 꼭 다시 풀어 보기)  (0) 2018.01.03
Comments