728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/84325
문제 설명
풀이 방법
1. 언어의 선호도를 반환하는 메서드 생성
2. 반복문을 통해 직업군별 언어 각각 점수 계산하여 Map에 저장, 1에서 생성한 메서드 활용
3. 가장 높은 점수의 직업군을 반환하는 메서드 생성
내 코드(JAVA)
public class Solution {
public String solution(String[] table, String[] languages, int[] preference) {
String answer = "";
Map<String, Integer> map = new HashMap<>(); // 언어와 선호도 점수를 담는 맵
// 한 row 씩 반복
// 직업군 | 언어들
// "SI | JAVA JAVASCRIPT SQL PYTHON C#"
// "CONTENTS | JAVASCRIPT JAVA PYTHON SQL C++"
// "HARDWARE | C C++ PYTHON JAVA JAVASCRIPT"
for(String row : table) {
// String 형식의 row를 공백으로 나누어 배열에 저장
String[] rowArr = row.split(" ");
int score = 0;
int checkScore = 5;
map.put(rowArr[0], 0); // map에 언어이름과 점수 초기값 세팅
// 5점부터 각 직업군별 언어들을 계산
for(int i=1; i<rowArr.length; i++) {
String lang = rowArr[i];
score += (checkScore-- * getPreference(languages, preference, lang));
}
// 계산된 값 저장
map.put(rowArr[0], score);
}
answer = getHighJob(map);
return answer;
}
// 언어의 선호도 점수를 가져오는 메서드
public int getPreference(String[] languages, int[] preference, String findLang) {
int findPreference = 0;
for(int i=0; i<languages.length; i++) {
if(languages[i].equals(findLang)) {
findPreference = preference[i];
break;
}
}
return findPreference;
}
// 가장 높은 점수의 직업군을 반환하는 메서드
public String getHighJob(Map<String, Integer> map) {
Iterator iter = map.entrySet().iterator();
String highJob = "";
int max = 0;
while(iter.hasNext()) {
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter.next();
int totalScore = entry.getValue();
if(max < totalScore) {
max = totalScore;
highJob = entry.getKey();
} else if(max == totalScore){
// 동일한 점수면 사전순
String[] arr = {highJob, entry.getKey()};
Arrays.sort(arr);
highJob = arr[0];
}
}
return highJob;
}
}
리팩토링을 할 수 있는 부분이 많은 것 같다.
Collections 메서드를 활용하여 가독성을 높일 수도 있을 것 같다.
피드백 환영 !
728x90
반응형
'알고리즘' 카테고리의 다른 글
[LeetCode/JAVA] 993. Cousins in Binary Tree (0) | 2021.08.31 |
---|---|
[프로그래머스/JAVA] 숫자 문자열과 영단어 (0) | 2021.08.29 |
[LeetCode/JAVA] 071. Greatest Common Divisor of Strings (0) | 2021.08.19 |
[LeetCode/JAVA] 942. DI String Match (0) | 2021.08.11 |
[LeetCode/JAVA] 100. Same Tree (0) | 2021.08.10 |
댓글