Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

class : Design Code

[프로그래머스][C++] 2022 kakao intership : 성격 유형 검사하기 본문

C++/CodingTest

[프로그래머스][C++] 2022 kakao intership : 성격 유형 검사하기

클디코 2023. 3. 5. 20:21

https://school.programmers.co.kr/learn/courses/30/lessons/118666?language=cpp

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1) first try : 단순 array로 문제 해결. 보완 필요.

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int scoreArr[2][4];

int choiceScore(int num){
    if(num==1 || num ==7)
        return 3;
    else if (num==2 || num ==6)
        return 2;
    else if (num==3 || num ==5)
        return 1;
    else
        return 0;
}

void wordFunc(string word, int plusScore){
    if (word=="R")
        scoreArr[0][0]+=plusScore;
    else if(word=="C")
        scoreArr[0][1]+=plusScore;
    else if(word=="J")
        scoreArr[0][2]+=plusScore;
    else if(word=="A")
        scoreArr[0][3]+=plusScore;
    
    else if(word=="T")
        scoreArr[1][0]+=plusScore;
    else if(word=="F")
        scoreArr[1][1]+=plusScore;
    else if(word=="M")
        scoreArr[1][2]+=plusScore;
    else if(word=="N")
        scoreArr[1][3]+=plusScore;
    
    return;
}


string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    string word = "";
    int plusScore=0;
    int index = choices.size();

    for(int i=0;i<index;i++){
        if(choices[i]>4){
            word=survey[i][1];
        }
        else if(choices[i]<4){
            word=survey[i][0];
        }
        else continue;

        plusScore=choiceScore(choices[i]);
        wordFunc(word,plusScore);
    }
    
    if(scoreArr[0][0]>=scoreArr[1][0]){
        answer+='R';
    }
    else answer+='T';
    
    if(scoreArr[0][1]>=scoreArr[1][1]){
        answer+='C';
    }
    else answer+='F';
    
    if(scoreArr[0][2]>=scoreArr[1][2]){
        answer+='J';
    }
    else answer+='M';
    
    if(scoreArr[0][3]>=scoreArr[1][3]){
        answer+='A';
    }
    else answer+='N';
        
    return answer;
}

 

테스트 1 통과 (0.02ms, 4.2MB)
테스트 2 통과 (0.01ms, 4.21MB)
테스트 3 통과 (0.02ms, 3.68MB)
테스트 4 통과 (0.01ms, 4.22MB)
테스트 5 통과 (0.01ms, 4.21MB)
테스트 6 통과 (0.02ms, 4.22MB)
테스트 7 통과 (0.01ms, 3.7MB)
테스트 8 통과 (0.01ms, 3.63MB)
테스트 9 통과 (0.02ms, 4.16MB)
테스트 10 통과 (0.02ms, 3.74MB)
테스트 11 통과 (0.02ms, 3.68MB)
테스트 12 통과 (0.03ms, 4.21MB)
테스트 13 통과 (0.07ms, 4.14MB)
테스트 14 통과 (0.10ms, 3.68MB)
테스트 15 통과 (0.08ms, 4.16MB)
테스트 16 통과 (0.08ms, 4.14MB)
테스트 17 통과 (0.09ms, 3.82MB)
테스트 18 통과 (0.09ms, 4.13MB)
테스트 19 통과 (0.09ms, 4.21MB)
테스트 20 통과 (0.09ms, 4.2MB)

2)second try : map 사용 -> 속도와 메모리 모두 향상됨

#include <iostream>
#include <string>
#include <vector>
#include <map>

using namespace std;

map<char, int> scoreMap;

string solution(vector<string> survey, vector<int> choices) {
    string answer = "";
    int size=survey.size();
    int plusScore;

    for (int i = 0; i < size; i++) {
        plusScore=abs(4-choices[i]);
        
        if (choices[i] < 4) {
            scoreMap[survey[i][0]] +=plusScore ;
        } else {
            scoreMap[survey[i][1]] +=plusScore;
        }
    }

 
    /*
    for (auto iter = scoreMap.begin() ; iter !=  scoreMap.end(); iter++){
        cout << iter->first << " " << iter->second << endl;
    }*/

    answer += (scoreMap['R'] >= scoreMap['T'] ? "R" : "T");
    answer += (scoreMap['C'] >= scoreMap['F'] ? "C" : "F");
    answer += (scoreMap['J'] >= scoreMap['M'] ? "J" : "M");
    answer += (scoreMap['A'] >= scoreMap['N'] ? "A" : "N");

    return answer;
}
테스트 1 통과 (0.02ms, 4.21MB)
테스트 2 통과 (0.01ms, 4.21MB)
테스트 3 통과 (0.01ms, 4.15MB)
테스트 4 통과 (0.01ms, 4.14MB)
테스트 5 통과 (0.01ms, 4.04MB)
테스트 6 통과 (0.01ms, 4.21MB)
테스트 7 통과 (0.02ms, 3.63MB)
테스트 8 통과 (0.01ms, 4.03MB)
테스트 9 통과 (0.01ms, 4.21MB)
테스트 10 통과 (0.02ms, 4.21MB)
테스트 11 통과 (0.01ms, 4.21MB)
테스트 12 통과 (0.03ms, 3.75MB)
테스트 13 통과 (0.03ms, 4.03MB)
테스트 14 통과 (0.04ms, 3.64MB)
테스트 15 통과 (0.05ms, 4.04MB)
테스트 16 통과 (0.05ms, 3.82MB)
테스트 17 통과 (0.05ms, 4.15MB)
테스트 18 통과 (0.05ms, 4.14MB)
테스트 19 통과 (0.05ms, 3.76MB)
테스트 20 통과 (0.06ms, 4.15MB)