문제
https://school.programmers.co.kr/learn/courses/30/lessons/118666
문제 풀이
정말 단순한 구현 문제입니다.
이런 구현 문제는 문제를 차근차근 읽어가면서, 파악하고 최종 입력과 결과를 바탕으로 생각해 주면 편합니다.
해당 문제도 문제가 엄청 길지만 요약하면 엄청 간단하다.
4가지의 유형이 있다.
각 지표별로 점수를 계산해서 더 높은 알파벳의 유형을 선택한다.
예를 들어서 설문조사가 끝나고, 1번 지표에서 R이 3점, T가 2점이면 R이 선택된다.
한가지 주의할 점은 만약 두 유형의 점수가 같다면 사전순으로 앞에 오는 성격이 채택된다.
즉 각 지표에서 앞에 오는 알파벳이 선택된다.
만약 내가 RT를 검사한다면, 해당 설문은 R을 비동의, T를 동의하는 설문이다.
위 조건은 아래에서 선택지에 대한 점수를 계산할 때 사용된다.
설문지는 총 7개의 선택지가 있습니다.
- 매우 비동의 -> 3점
- 비동의 -> 2점
- 약간 비동의 -> 1점
- 모르겠음 -> 0점
- 약간 동의 ->1점
- 동의 -> 2점
- 매우 동의 -> 3점
위에서 저희는 설문 유형에 따라 비동의 성격과 동의 성격을 나눴습니다.
예를 들어 RT를 검사하고, 내가 3번을 선택했으면 비동의 유형인 R에 1점을 주는 것입니다.
만약 6번을 선택햇으면 동의 유형인 T에 2점을 주는 것입니다.
이런 식으로 모든 설문조사를 끝내서 각 지표별로 선택된 유형을 출력하면 끝입니다.
코드
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int score[27]={0,}; //아스키코드 A는 65로 시작함.
string answer = "";
void funct(char fir,char sec){
if(score[fir-65]<score[sec-65])
answer+=sec;
else //다른 경우는 무조건 앞의 거
answer+=fir;
}
string solution(vector<string> survey, vector<int> choices) {
for(int i=0; i<survey.size();i++){
if(choices[i]>4) // 뒤에 점수
score[survey[i][1]-65]+=choices[i]-4;
else if(choices[i]<=4) //앞에 점수
score[survey[i][0]-65]+=4-choices[i];
}
funct('R','T');
funct('C','F');
funct('J','M');
funct('A','N');
return answer;
}
'CodingTest > Programmers' 카테고리의 다른 글
프로그래머스[Programmers] - 셔틀버스(C++)[LV3] (0) | 2023.06.23 |
---|---|
프로그래머스[programmers] - 숫자 카드 나누기(C++)[LV2] (0) | 2023.06.23 |
프로그래머스[Programmers] - 두 큐 합 같게 만들기(C++)[LV2] (1) | 2023.06.18 |
프로그래머스[Programmers] - 디펜스 게임(C++)[LV2] (0) | 2023.04.23 |
프로그래머스[Programmers] - 미로 탈출(C++)[LV2] (0) | 2023.04.21 |