Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 델리게이트
- C++최적화
- 스마트포인터
- UELOG
- UML관련
- dataasset
- 람다사용정렬
- 정렬
- 애셋로드
- 강참조
- enumasByue
- UE4 커스텀로그
- C++
- 크리티컬섹션
- 언리얼엔진구조체
- 정렬알고리즘
- 약참조
- 데이터애셋
- BFS
- 선택정렬
- 람다
- unorder_map
- 언리얼가비지컬렉터
- moreeffectiveC++
- 알고리즘
- stl
- UE_LOG
- 프로그래머스
- map
- 자료구조
Archives
- Today
- Total
기억을 위한 기록들
[프로그래머스 lv 1 ] - 4주차 직업군 추천 본문
https://programmers.co.kr/learn/courses/30/lessons/84325
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
string solution( vector<string> table, vector<string> languages, vector<int> preference ) {
map<string, int> m;
int size1 = languages.size();
//각 언어와 선호도 점수 m
for( int i = 0; i < size1; i++ )
{
m[languages[i]] = preference[i];
}
vector<int> results;
int tableSize = table.size();
//각 직업군의 선호도 반영 점수 계산
for( int i = 0; i < tableSize; i++ )
{
//table 각 직업군의 언어별 점수 확인
string value = table[i];
int index = 0;
map<string, int> jobValue;
string target;
int curScore = 6;
while( value[index] != '\0' )
{
if( value[index] == ' ' )
{
jobValue[target] = curScore--;
target = "";
index++;
}
target += value[index++];
}
jobValue[target] = curScore;
int score = 0;
for( int j = 0; j < size1; j++ )
{
score += m[languages[j]] * jobValue[languages[j]];
}
results.push_back( score );
}
int max = -214000000;
int i;
int maxIndex = 0;
//제일 높은 점수 확인
for( i = 0; i < results.size(); i++ )
{
if( max < results[i] )
{
max = results[i];
maxIndex = i;
}
}
map<int, string> m3;
vector<string> resultString;
m3[0] = "SI"; m3[1] = "CONTENTS"; m3[2] = "HARDWARE"; m3[3] = "PORTAL"; m3[4] = "GAME";
for( int i = 0; i < results.size(); i++ )
{
if( results[i] == max )
{
resultString.push_back( m3[i] );
}
}
if( 2 <= resultString.size() )
{
sort( resultString.begin(), resultString.end(), less<>() );
}
return resultString[0];
}
정리- 함수추출,for문 불필요제거
#include <string>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
void CalcScore( string value, map<string, int>& jobValue )
{
string target;
int curScore = 6;
int index = 0;
//
while( value[index] != '\0' )
{
if( value[index] == ' ' )
{
jobValue[target] = curScore--;
target = "";
index++;
}
target += value[index++];
}
jobValue[target] = curScore;
}
string solution( vector<string> table, vector<string> languages, vector<int> preference ) {
map<string, int> m;
int size1 = languages.size();
//각 언어와 선호도 점수 m
for( int i = 0; i < size1; i++ )
{
m[languages[i]] = preference[i];
}
vector<int> results;
int tableSize = table.size();
int max = -214000000;
for( int i = 0; i < tableSize; i++ )
{
//table 각 직업군의 언어별 선호도 점수 확인
string value = table[i];
map<string, int> jobValue;
CalcScore( value, jobValue );
int score = 0;
for( int j = 0; j < size1; j++ )
{
score += m[languages[j]] * jobValue[languages[j]];
}
results.push_back( score );
if( max < score )
{
max = score;
}
}
map<int, string> m3;
vector<string> resultString;
m3[0] = "SI"; m3[1] = "CONTENTS"; m3[2] = "HARDWARE"; m3[3] = "PORTAL"; m3[4] = "GAME";
//제일 큰값이 몇개인지 확인하기 위해
for( int i = 0; i < results.size(); i++ )
{
if( results[i] == max )
{
resultString.push_back( m3[i] );
}
}
//제일높은 점수가 1개 초과한다면 사전순 정렬로 제일 앞인거
if( 1 < resultString.size() )
{
sort( resultString.begin(), resultString.end(), less<>() );
}
return resultString[0];
}
'Coding Test - cpp > String' 카테고리의 다른 글
[프로그래머스 lv 2 ] - 이진 변환 반복하기 (C++) (1) | 2023.11.20 |
---|---|
[프로그래머스 lv 1 ] - 크기가 작은 부분문자열 (C++) (0) | 2023.11.16 |
[프로그래머스 lv 2 ] - 영어 끝말잇기 (0) | 2021.09.25 |
[프로그래머스 lv 1 ] - [1차] 비밀지도 (0) | 2021.09.13 |
[프로그래머스 lv 2 ] - 오픈채팅방 (0) | 2021.09.08 |