Notice
Recent Posts
Recent Comments
Link
투케이2K
212. (java/자바) 알고리즘 : 완주하지 못한 선수 - hashmap 해쉬맵 사용 본문
[ 개발 환경 설정 ]
개발 툴 : Eclipse
개발 언어 : Java
[소스 코드]
package ex5;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MainActivity20 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("[Program Start]");
System.out.println("");
/**
* [완주하지 못한 선수]
* 1. 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다
* 2. completion (완주 배열)의 길이는 participant (전체 배열)의 길이보다 1 작습니다
* 3. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다
* 4. 참가자 중에는 동명이인이 있을 수 있습니다
* 5. 입출력 예 :
* participant [전체] : ["mislav", "stanko", "mislav", "ana"]
* completion [완주] : ["stanko", "ana", "mislav"]
* return [낙오] : "mislav"
* 6. 참고 : 해시 알고리즘 풀이 사용
* */
// 초기 전체 및 완주자 배열 선언
String total[] = {"mislav", "stanko", "mislav", "ana"}; // 전체 길이 3
String success[] = {"stanko", "ana", "mislav"}; // 합격자 전체길이 - 1 = 2
// 낙오자 확인 메소드 호출 실시
System.out.println("낙오자 : " + solution(total, success));
}// 메인 종료
public static String solution (String t[], String s[]) {
// 리턴 결과를 담을 변수 선언
String result = "";
// 인풋으로 들어온 데이터 확인
System.out.println("total : " + Arrays.toString(t));
System.out.println("success : " + Arrays.toString(s));
System.out.println("");
// hashmap 을 사용해서 낙오자 판단 실시
HashMap <String, Integer> map = new HashMap();
// 동명이인 이름이 같은 사람 카운트 실시
for(int i=0; i<t.length; i++) {
if(map.containsKey(t[i])) { // 키값이 존재하는 경우
int total_cnt = (int) map.get(t[i]); // key에 해당하는 value (정수) 값을 가져옵니다
map.replace(t[i], (total_cnt+1)); // 해당 key value 값을 +1 더해서 업데이트합니다
}
else { // 키값이 존재하지 않는 경우
map.put(t[i], 1); // 초기 1값으로 데이터를 저장합니다
}
}
System.out.println("동명이인 판단 : " + map.toString());
// 합격자 명단을 돌면서 특정인 value 값을 -1 감소시킵니다 (합격 처리)
for(int j=0; j<s.length; j++) {
if(map.containsKey(s[j])) { //해쉬맵에 특정인 키 값이 존재하는 경우
int success_cnt = (int) map.get(s[j]); // key에 해당하는 value (정수) 값을 가져옵니다
map.replace(s[j], (success_cnt-1)); // 해당 key value 값을 -1 연산 수행 후 업데이트합니다
}
}
System.out.println("합격 여부 판단 : " + map.toString());
System.out.println("");
// 최종 0값이 아닌 (즉, 합격자가 아닌) key 값을 확인해서 결과를 리턴합니다
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
String key = (String) iterator.next();
if(map.get(key) != 0) { // value 값이 0 이 아닐 경우
result = key;
break;
}
}
// 결과 리턴 실시
return result;
}
}// 클래스 종료
[결과 출력]
[요약 설명]
/**
* [완주하지 못한 선수]
* 1. 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다
* 2. completion (완주 배열)의 길이는 participant (전체 배열)의 길이보다 1 작습니다
* 3. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다
* 4. 참가자 중에는 동명이인이 있을 수 있습니다
* 5. 입출력 예 :
* participant [전체] : ["mislav", "stanko", "mislav", "ana"]
* completion [완주] : ["stanko", "ana", "mislav"]
* return [낙오] : "mislav"
* 6. 참고 : 해시 알고리즘 풀이 사용
* */
반응형
'Java' 카테고리의 다른 글
214. (java/자바) 알고리즘 : K번째수 - 이차원 배열 (다차원 배열) , Arrays copyOfRange 배열 복사 (0) | 2021.07.23 |
---|---|
213. (java/자바) hashmap 해쉬맵 key 리스트 , value 리스트 확인 - keySet , Collection , Set , Iterator (0) | 2021.07.23 |
211. (java/자바) 알고리즘 : 키패드 누르기 (0) | 2021.07.22 |
210. (java/자바) List Map (리스트맵) 데이터 삽입 및 데이터 파싱 실시 (0) | 2021.07.21 |
209. (java/자바) file exists 사용해 폴더 생성 상태 확인 및 file mkdirs 폴더 생성 실시 (0) | 2021.07.15 |
Comments