[프로그래머스] Lv1 완주하지 못한 선수

changi123·2023년 8월 20일
0
post-thumbnail

문제설명

해결방안

(1) 해시맵을 사용하여 시간복잡도를 해결하고 알맞게 순회하여 완주하지 못한 선수를 찾자

코드

import java.util.*;


class Solution {
    public String solution(String[] participant, String[] completion) {
       String answer = "";
	        
	        ArrayList list = new ArrayList();
	        
	        HashMap<String, List<String>> map = new HashMap<String, List<String>>();
	        		
	        for(int i= 0 ; i< participant.length;i++) {
	        	if(!map.containsKey(participant[i])) {	
	        		map.put(participant[i], new ArrayList<String>());
	        	}
	        	map.get(participant[i]).add(participant[i]);
	        }
	        
	        for(int  i = 0; i<completion.length;i++) {
	        	if(map.containsKey(completion[i])) {
	        		List<String> names = map.get(completion[i]);
	        		if(names.size()>1) {
	        			names.remove(0);
	        		} else { 	
	        			map.remove(completion[i]);
	        		}
	        	}
	        	
	        }

	        Iterator<String> it = map.keySet().iterator();
	        while (it.hasNext()) {
				String key = it.next();
				answer = key;
				break;
				
			}
	        return answer;
    }
}

내 코드 설명

(1) 해시맵을 사용하여 참여자 선수와 동명이인이 있을 수 있으니 value 값에 리스트 타입으로 불린만큼 add 해줬다.
(2) 완주한 선수만큼 반복문을 체크하여 value 값에 해당하는 선수의 리스트에서 remove 해준다.
(3) iterator를 사용하여 다음 key 값이 있는 경우 즉 완주하지 못한 선수의 key (이름) 이 있다면 answer = key 값을 넣고 순회를 종료한다.

다른 사람 풀이

--

다른 사람 코드 설명

--

느낀점

해시맵과 Iterator 에 대해 너무 모르고 있어서 정리해보자

  • 해시맵이란 ?
    - 해싱(Hashing) 된 맵(map)

    • 맵(Map) : 키(Key)와 값(Value) 두 쌍으로 데이터를 보관하는 자료구조이다.
    • 키는 유일한 값이어야한다. 즉, 하나의 맵에 두 개 이상의 같은 키값이 존재하면 안된다.
    • 값은 중복이 되어도 상관없다.
    • 참고 : 컬렉션 클래스 Hashtable 이 있다.
  • 관련 메소드
    - containkey(key) : 맵에 해당하는 키가 있는지 참 거짓으로 반환한다.

    • put(key, value) : 맵에 키와 값을 저장한다.
    • keyset() : 모든 키를 보여준다 (모든 키를 순회하는 코드에 적합)
  • Iterator 개념과 사용법
    - Iterator<데이터타입> iterator명 = 컬렉션.iterator();
    ㄴ 컬렉션이란 ? : (List, Set, Map, Queue 등)

    • while(iterator명.hasNext(){
      iterator.next();
      }
    • iterator의 장점 : 모든 컬렉션 프레임워크에 공통으로 사용 가능하며 컬렉션 프레임워크에서 쉽게 값을 가져오고 제거할 수 있다. 3개의 메소드만 알면 되어서 사용 하기 매우 쉽다
    • iterator의 단점 : 처음부터 끝까지 단방향만 반복이 가능하고 값을 변경하거나 추가가 불가 능 하고 대량의 데이터를 제어할 때 속도가 느리다.
                                 
profile
개발자 홍찬기 꾸준한 사람이 되자

0개의 댓글

관련 채용 정보