728x90
https://programmers.co.kr/learn/courses/30/lessons/84325
문제 요약
직업군 언어 점수를 정리한 문자열 배열 table, 개발자가 사용하는 언어를 담은 문자열 배열 languages, 언어 선호도를 담은 정수 배열 preference가 매개변수로 주어집니다. 개발자가 사용하는 언어의 언어 선호도 x 직업군 언어 점수의 총합이 가장 높은 직업군을 return 하도록 solution 함수를 완성해주세요. 총합이 같은 직업군이 여러 개일 경우, 이름이 사전 순으로 가장 빠른 직업군을 return 해주세요.
문제 풀이
import java.util.*;
public class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
Arrays.sort(table);
String t[][] = new String[5][6]; // t : 2 dimensional arr of table[]
int i, j; StringTokenizer st;
for (i = 0; i < 5; ++i) {
st = new StringTokenizer(table[i]);
t[i][0] = st.nextToken();
for (j = 5; j >= 1; --j)
t[i][j] = st.nextToken();
}
int s[] = new int[5], k, n = languages.length, p; String l; // s : scores for each occupation
for (k = 0; k < n; ++k) {
l = languages[k]; // l : String language
p = preference[k]; // p : int preference of the language
loop:
for (i = 0; i < 5; ++i) {
for (j = 1; j <= 5; ++j) { // j : int score of the language
if (l.equals(t[i][j])) {
s[i] += j * p;
continue loop;
}
}
}
}
int ms = 0, mi = -1; // ms : max score, mi : idx of max score
for (i = 0; i < 5; ++i) {
if (ms < s[i]) {
ms = s[i];
mi = i;
}
}
return t[mi][0];
}
}
- 전달받은 table[]( 각 직업군에 대한 언어 점수 순서를 담은 배열 )을 미리 정렬함
["CONTENTS JAVASCRIPT JAVA PYTHON SQL C++",
"GAME C++ C# JAVASCRIPT C JAVA",
"HARDWARE C C++ PYTHON JAVA JAVASCRIPT",
"PORTAL JAVA JAVASCRIPT PYTHON KOTLIN PHP",
"SI JAVA JAVASCRIPT SQL PYTHON C#"]
- 크기가 5*6인 2차원 배열 String t[][] 생성
table[]을 기반으로 StringTokenizer를 사용하여 String 문자열을 넣음
첫 번째 열( 인덱스 0 )의 직업군 이후에는 점수가 5점인 언어가 내림차순으로 있으므로
두 번째 열( 인덱스 1 )부터는 역순으로 값을 넣음
t[ ][ ] | < 직업군 > | < 점수 > | ||||
i / j | 0 | 1 | 2 | 3 | 4 | 5 |
0 | CONTENTS | C++ | SQL | PYTHON | JAVA | JAVASCRIPT |
1 | GAME | JAVA | C | JAVASCRIPT | C# | C++ |
2 | HARDWARE | JAVASCRIPT | JAVA | PYTHON | C++ | C |
3 | PORTAL | PHP | KOTLIN | PYTHON | JAVASCRIPT | JAVA |
4 | SI | C# | PYTHON | SQL | JAVASCRIPT | JAVA |
- 크기 5인 배열 int s[] 생성
langages[]을 순회하며( 0 <= k < language.length )
t[][]에서 각 언어에 대한 직업군 별 총합( 언어 선호도( preference[k] ) * 언어 점수( j ) 들의 합 )을 계산하여 넣음
s[ ] | < 점수 총합 > |
i | s[i] |
0 | 36 ( 7*3 + 5*1 + 5*2 ) |
1 | 25 ( 5*5 ) |
2 | 41 ( 7*3 + 5*4 ) |
3 | 21 ( 7*3 ) |
4 | 29 ( 7*2 + 5*3 ) |
k | 0 | 1 | 2 | |
< 언어 종류 > | languages[k] | "PYTHON" | "C++" | "SQL" |
< 선호도 > | preference[k] | 7 | 5 | 5 |
- 최댓값( ms : max score )을 구하고 인덱스( mi : max idx )도 같이 구해서
그 인덱스에 해당하는 직업군 리턴( t[mi][0] )
반응형
'코딩 문제 풀기 ( Algorithm problem solving ) > 프로그래머스 ( Programmers )' 카테고리의 다른 글
[프로그래머스(Programmers)][자바(java)] (Lv1) 6주차 - 복서 정렬하기 <위클리 챌린지> (0) | 2021.09.10 |
---|---|
[프로그래머스(Programmers)][자바(java)] (Lv2) 5주차 - 모음 사전 <위클리 챌린지> (0) | 2021.09.01 |
[프로그래머스(Programmers)][자바(java)] (Lv3) 3주차 - 퍼즐 조각 채우기 <위클리 챌린지> (0) | 2021.08.26 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 2주차 - 상호 평가 <위클리 챌린지> (0) | 2021.08.26 |
[프로그래머스(Programmers)][자바(java)] (Lv1) 1주차 - 부족한 금액 계산하기 <위클리 챌린지> (0) | 2021.08.26 |