KOOGLE 문제 WA 질문있습니다. 허허허

  • ginger
    ginger

    안녕하세요 KOOGLE 문제 풀고있는 뉴비입니다.

    복잡한 코드도 아니고 나름 깔끔하게 접근했다고 생각하는데
    WA가 뜨네요 =_=
    소숫점 짤릴까봐 long double도 써보고, 스트링 비교하는 길이 때문에 그럴까봐 길이 처리도 해줬는데 허허
    테스트케이스라도 좀 받을 수 없을까요?? ㅠ

    #include <iostream>
    #include <math.h>
    #include <string.h>
    using namespace std;
    
    static int N=0;
    static char crypt[100][1001] = {0, };
    static long double max_power = -1;
    
    int Koogle(){
        //crypt 중 세기가 가장 강한 암호의 index를 반환한다.
        int ret_idx = 0;
    
        for(int i=0; i<N; i++){
            int number_of_char = 0;
            int number_of_num = 0;
            int len = strlen(crypt[i]);
            //48~57 까지는 숫자. 97부터 122까지는 알파벳
            for(int j=0; j<len; j++){
                if(crypt[i][j] >= 48 && crypt[i][j] <= 57)
                    number_of_num++;
                else if(crypt[i][j] >= 97 && crypt[i][j] <= 122)
                    number_of_char++;
            }
    
            long double log_26 = log(26);
            long double log_10 = log(10);
    
            long double power = (number_of_char * log_26) + (number_of_num * log_10);
    
            int cmp_len = strlen(crypt[ret_idx]);
            if(cmp_len > strlen(crypt[i]))
                cmp_len = strlen(crypt[i]);
    
            if((power > max_power) 
                || ((power == max_power) &&  (strncmp(crypt[ret_idx], crypt[i], cmp_len) == 1))){
                max_power = power;
                ret_idx = i;
            }
        }
    
        //strcmp 값이 클 수록 나중에 나온다는 거임. 즉, strcmp 값도 최소여야함.
    
    
        return ret_idx;
    }
    
    void Init(){
        for(int i=0; i<100; i++)
            for(int j=0; j<1001; j++)
                crypt[i][j] = 0;
        max_power = -1;
    
    }
    
    int main(void){
        int C=0;
    
        cin>>C;
    
        while(C-->0){
            Init();
            cin>>N;
            for(int i=0; i<N; i++)
                cin>>crypt[i];
            int idx = Koogle();
            cout<<crypt[idx]<<endl;
        }
        return 0;
    }
    


    10년 전
5개의 댓글이 있습니다.
  • 일루
    일루

    strncmp가 >0일때 항상 1을 리턴하나요?


    10년 전 link
  • ginger
    ginger

    앞의 스트링이 크면 1, 뒤의 스트링이 크면 -1을 리턴하는 것으로 알고있습니다ㅎ


    10년 전 link
  • Kureyo
    Kureyo

    http://www.cplusplus.com/reference/cstring/strncmp/?kw=strncmp

    표준상 부호만 정해져있고, 값의 크기는 정해져 있지 않습니다.
    제가 본 구현은 a!=b일때 a-b였던걸로 기억합니다.


    10년 전 link
  • ginger
    ginger

    @일루, @Kureyo 감사합니다. ㅋㅋㅋ 말씀해주신 부분들이 맞네요.
    역시 오개념이 잡히면 힘드네요 허허허ㅠ


    10년 전 link
  • qowognssla
    qowognssla

    #include "iostream"
    #include "string.h"
    #include "math.h"

    using namespace std;

    int main(){

    int test;
    cin >> test;
    
    
    while (test--){
        int num;
        cin >> num;
        char code[101][1001];
        long double value[101];
        for (int i = 0; i < num; i++){
            cin >> code[i];
        }
        int alpa = 0;
        int Max_index = 0;
    
        for (int j = 0; j < num; j++){
    
            for (int i = 0; i < strlen(code[i]); i++){
                if (code[j][i] >= 'a'){
                    alpa++;
                }
            }
            value[j] = alpa*1.4149733 + (strlen(code[j]) - alpa);
    
            if (value[Max_index] < value[j])
                Max_index = j;
    
    
            else if (value[Max_index] == value[j]){
    
                if (strcmp(code[Max_index], code[j]) >0)
                    Max_index = j;
    
            }
            alpa = 0;
    
        }
        cout << code[Max_index] << endl;
        Max_index = 0;
    }
    return 0;

    }

    계속 오답이;;


    10년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.