풀이 : 해시 파트에 있는 문제 인데 효율성이 0점 나왔다..ㅎ
1. 참여 인원에 대한 배열을 중복값을 없앤 리스트 생성
2. 리스트 인원에 대한 hashmap 에 Key 와 Value 를체크하여 값을 넣기
3. 만들어진 hashmap로 완주자를 비교하여 1이상이 된 값을 answer 에 넣고 Break
효율성이 엉망인 이유는 구글링을 하고 비교했을 때 이유를 알게되었다.
-> 다중 For 문이 2개 + 중복을 없애는 Stream 구문 에의한 시간복잡도가 엄청나게 올라간것이었다..
package com.company;
import java.util.*;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class NoFinshMan {
static String[] participant = {"mislav", "stanko", "mislav", "ana"};
static String[] completion = {"stanko", "ana", "mislav"};
private final static Logger LOG = Logger.getGlobal();
public static void main(String[] args) {
System.out.println(solution(participant,completion));
}
public static String solution(String[] participant, String[] completion) {
String answer = "";
HashMap<String, Integer> _hashMap = new HashMap<>();
List<String> tempArray = Arrays.stream(participant).distinct().collect(Collectors.toList());
int num = 0;
for (String Item : tempArray)
{
for (int i = 0; i < participant.length; i++)
{
if (Item.compareTo(participant[i]) == 0)
num++;
}
_hashMap.put(Item, num);
num = 0;
}
for (String Value : _hashMap.keySet())
{
for (int i = 0; i < completion.length; i++)
{
if (Value.compareTo(completion[i]) == 0)
_hashMap.replace(Value, _hashMap.get(Value) -1);
}
if (_hashMap.get(Value) >= 1)
{
answer = Value;
break;
}
}
return answer;
}
}
풀이 2 진행 방식은 내가 생각한대로 와 비슷하지만 다중for 문이 없다..
Hashmap 을 많이 사용해보지 못해서 라고 할 수는 있지만... 해쉬 관련된 문제를 많이 풀어야겠다..
package com.company;
import java.util.*;
import java.util.logging.Logger;
import java.util.stream.Collectors;
public class NoFinshMan {
static String[] participant = {"mislav", "stanko", "mislav", "ana"};
static String[] completion = {"stanko", "ana", "mislav"};
private final static Logger LOG = Logger.getGlobal();
public static void main(String[] args) {
System.out.println(solution(participant,completion));
}
public static String solution(String[] participant, String[] completion) {
String answer = "";
Map<String, Integer> _hashMap = new HashMap<>();
for (String person: participant)
{
if (_hashMap.get(person) == null)
_hashMap.put(person, 1);
else
_hashMap.put(person, _hashMap.get(person) + 1);
}
for (String com_person: completion)
_hashMap.put(com_person, _hashMap.get(com_person) - 1);
for (String Value : _hashMap.keySet())
{
if (_hashMap.get(Value) >= 1)
{
answer = Value;
break;
}
}
return answer;
}
}
'알고리즘 > JAVA' 카테고리의 다른 글
[JAVA] 위장 - 프로그래머스 (0) | 2020.11.17 |
---|---|
[JAVA] 전화번호 목록 - 프로그래머스 (0) | 2020.11.16 |
[JAVA] 프린터 - 프로그래머스 (0) | 2020.10.24 |
[JAVA] 스킬트리 - 프로그래머 (0) | 2020.10.23 |
[JAVA] 124 나라의 숫자 - 프로그래머스 (0) | 2020.10.22 |