출처: 프로그래머스 연습문제 https://programmers.co.kr/learn/courses/30/lessons/42576
프로그래머스 완주하지 못한 선수 ( 자바 )
두 개의 문자열 배열에서 하나의 문자열만 다르다. 또한 배열에는 중복되는 문자열이 존재할 수 있다.
이 때, 다른 하나의 문자열을 리턴하기
2가지 풀이법
1 소팅해서 동일한 문자를 일일히 찾는다.
다른 하나를 찾아야 하므로 소팅이 필요한다. 하지만, 소팅O(nlgn) 때문에 시간이 비효율적이다.
2 <문자열, 숫자> 해시맵을 이용한다. 문자열의 개수를 저장.
배열을 돌며 각 문자열을 비교하고 개수를 더하거나 빼면된다.
+ hashmap함수 주석 참고
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
import java.util.HashMap;
import java.util.Map.Entry;
public class Solution {
public static int main(String[] participant, String[] completion) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
String input;
// 모든 이름의 개수 찾기. 중복되는 이름에 구분이 필요없다.
for(int i = 0 ; i < participant.length ; i++) {
input = participant[i];
if(!hm.containsKey(input)) {
hm.put(input, 1);
}else {
hm.put(input, hm.get(input)+1);
}
}
for(int i = 0 ; i < completion.length ; i++) {
input = completion[i];
hm.put(input, hm.get(input)-1);
}
/*
아래 코드는 hashmap사용에 비효율적.
hm.keySet과 hm.get으로 두 번이나 hashmap을 탐색하기 때문.
for (String string : hm.keySet()) {
if(hm.get(string) != 0) {
//return string;
System.out.println(string);
}
}
*/
// 한 번 탐색으로 처리하기
for (Entry<String, Integer> set : hm.entrySet()) {
if(set.getValue() != 0) {
return set.getKey();
}
}
return "";
}
}
|
cs |
'CS > 알고리즘 풀이' 카테고리의 다른 글
[ 백준 17837 ] 새로운 게임 2 (java) (0) | 2019.12.01 |
---|---|
[ 프로그래머스 ] 체육복 ( java ) (0) | 2019.11.26 |
[ 프로그래머스 ] 모의고사 ( java ) (0) | 2019.11.26 |
[ 프로그래머스- 2020카카오 공채 ] 문자열 압축 (java) (2) | 2019.11.23 |
[ 백준 14503 ] 로봇청소기 (java) (0) | 2019.11.11 |