728x90
반응형
https://github.com/ROUTINE-STUDY/Algorithm
알고리즘 스터디를 진행하고 있습니다. 😊
초보들로 구성되어있으며, 열심히 풀어보고 풀이 방식을 공유하고 피드백을 해주는 스터디입니다.
참여 문의는 댓글 혹은 GitHub 주소를 참고해주세요.
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/84325
코딩테스트 연습 - 4주차
개발자가 사용하는 언어와 언어 선호도를 입력하면 그에 맞는 직업군을 추천해주는 알고리즘을 개발하려고 합니다. 아래 표는 5개 직업군 별로 많이 사용하는 5개 언어에 직업군 언어 점수를 부
programmers.co.kr
문제 설명
풀이 방법
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 |
댓글