프로그래머스_C#/Level_1

[프로그래머스 C#] 4주차 직업군 추천하기

최애뎡 2021. 9. 10. 00:10
728x90
반응형

https://programmers.co.kr/learn/courses/30/lessons/84325

 

코딩테스트 연습 - 4주차

개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부

programmers.co.kr

using System;
using System.Collections.Generic;
using System.Linq;

public class Solution {
    public string solution(string[] table, string[] languages, int[] preference) {
        string answer = "";
        string[] _job = new string[] { "SI", "CONTENTS", "HARDWARE", "PORTAL", "GAME" };
        string[,] _table = new string[5,5];
        
        for (int i = -1; ++i < 5;)
        {
            string[] words = table[i].Split(' ');
            Array.Reverse(words);
            for (int j = -1; ++j < 5;)
                _table[i, j] = words[j];
        }
        
        List<KeyValuePair<int, string>> result = new List<KeyValuePair<int, string>>();
        
        for (int i = -1; ++i < 5;)
        {    
            int temp = 0;
            for (int j = -1; ++j < 5;)
            {                
                for (int x = -1; ++x < languages.Length;)
                    if (_table [i, j] == languages[x])
                    {                        
                        temp += (j + 1) * preference[x];
                        break;
                    } 
            }
            result.Add(new KeyValuePair<int, string>(temp, _job[i]));
        }
                
        result = result.OrderBy(x => x.Value).OrderByDescending(x => x.Key).ToList();
        answer = result[0].Value;
        
        return answer;
    }
}

음 고정값이 많아서 직업은 미리 배열로 선언해두고

table을 공백으로 걸러서 새 _table 배열로 선언 [ 이 부분에서 _job을 받아와도 되긴 하겠다. ]

_table 선언할 때 편하게 하기 위해서 미리 Reverse하구

최종 값을 정렬할 때 편하게 할라구 리스트로 하긴 할 건데 KeyValuePair<int, string>로 최종 점수, 직군으로

마지막에 직군 정렬하고 점수 정렬한 뒤 첫 직군을 반환

반응형