JoJun's
Jun's Devlog
JoJun's
전체 방문자
오늘
어제
  • 분류 전체보기 (51)
    • Java (16)
      • SpringBoot (12)
      • Java (4)
    • Linux (11)
      • CentOS (4)
      • 명령어(CentOS) (5)
      • Docker (2)
    • DataBase (15)
      • 튜닝 기법 (1)
      • MSSQL (7)
      • SQLD,SQLP (6)
    • 알고리즘 (4)
      • 정렬 (1)
      • 해시 (1)
      • 완전탐색 (1)
      • 탐욕법 (1)
    • 인프라 (3)
    • Web (2)
    • 개인공간 (0)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

  • 파일그룹
  • Java
  • springboot
  • @Component
  • cors
  • Dockerfile
  • 알고리즘
  • log4j2
  • MSSQL
  • docker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JoJun's

Jun's Devlog

알고리즘/해시

[알고리즘] 완주하지 못한 선수

2022. 2. 23. 15:11
728x90
반응형

 

● 문제 설명

수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다.

마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요.

● 제한사항

  • 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다.
  • completion의 길이는 participant의 길이보다 1 작습니다.
  • 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다.
  • 참가자 중에는 동명이인이 있을 수 있습니다.

● 입출력 예

participant completion return
["leo", "kiki", "eden"] ["eden", "kiki"] "leo"
["marina", "josipa", "nikola", "vinko", "filipa"] ["josipa", "filipa", "marina", "nikola"] "vinko"
["mislav", "stanko", "mislav", "ana"] ["stanko", "ana", "mislav"] "mislav"

● 입출력 예 설명

예제 #1
"leo"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #2
"vinko"는 참여자 명단에는 있지만, 완주자 명단에는 없기 때문에 완주하지 못했습니다.

예제 #3
"mislav"는 참여자 명단에는 두 명이 있지만, 완주자 명단에는 한 명밖에 없기 때문에 한명은 완주하지 못했습니다.

 


 

● Solution.java

import java.util.ArrayList;
import java.util.List;

class Solution {
  	public void arrayInit(List<List<String>> arr, int count)
	{
		for(int i = 0 ; i< count ; i++)
		{
			arr.add(new ArrayList<String>());
		}
	}
	
    public String solution(String[] participant, String[] completion) {
        String answer = "";
        List<List<String>> arr = new ArrayList<List<String>>();
        
        
        arrayInit(arr, completion.length);
        
        //Hash 테이블 삽입
        for(int i = 0 ; i < completion.length ; i++ )
        {
        	insertHashTable(arr,completion[i]);
        }
       
        String temp ;
        // Hash 테이블 Put
        for(int i = 0 ; i < participant.length ; i++)
        {
        	
        	if( (temp = putHashTable(arr,participant[i])) != null)
        		answer = temp;
        }
        return answer;
    }
    
    public String putHashTable ( List<List<String>> arr , String name )
    {
    	int value = 0;
    	for(int i = 1 ; i <= name.length() ; i++)
    	{
    		value +=   i * (int)(name.charAt(i-1)) ;
    	}
    	
    	int index = value % arr.size();
    	
    	for(int i = 0 ; i < arr.get(index).size() ; i++)
    	{
    		if(arr.get(index).get(i).equals(name))
    		{
    			arr.get(index).remove(i);
    			return null;
    		}	
    	}
    	
    	return name;
    	
    }
    
    public void insertHashTable ( List<List<String>> arr , String name )
    {
    	int value = 0;
    	for(int i = 1 ; i <= name.length() ; i++)
    	{
    		value +=   i * (int)(name.charAt(i-1)) ;
    	}
    	
    	int index = value % arr.size();
    	
    	arr.get(index).add(name);
    	
    }
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
    JoJun's
    JoJun's
    JoJun's의 기술블로그

    티스토리툴바