Given two lists Aand B, and B is an anagram of A. B is an anagram of A means B is made by randomizing the order of the elements in A.
We want to find an index mapping P, from A to B.
A mapping P[i] = j means the ith element in A appears in B at index j.
These lists A and B may contain duplicates. If there are multiple answers, output any of them.
For example, given A = [12, 28, 46, 32, 50] B = [50, 12, 32, 46, 28] We should return [1, 4, 3, 2, 0] as P[0] = 1 because the 0th element of A appears at B[1], and P[1] = 4 because the 1st element of A appears at B[4], and so on.
Note: A, B have equal lengths in range [1, 100]. A[i], B[i] are integers in range [0, 10^5].
- 기본 A 배열의 값 = 방 을 map으로 저장
- B 배열 순환을 돌면서 동일 값을 찾으면 그 값으로 A 배열의 방 위치를 꺼내옴
- answer 의 방 위치에 B 에서 찾은 원소의 방위치를 저장
- 리턴
/**
* A 의 애너그램인 B 를 보고 A 의 각원소들이 B의 어느 원소에 위치하는지 확인해라.
*
* @param a
* @param b
* @return
*/
private static int[] solve(int[] a, int[] b) {
int[] answer = new int[a.length];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < a.length; i++) {
map.put(a[i], i);
}
int index = 0;
for (int i = 0; i < b.length; i++) {
//
if (map.containsKey(b[i])) {// 해당 원소 찾음
index = map.get(b[i]);// 인덱스 추출
answer[index] = i; // 원 배열 인덱스 위치에 b 배열 인덱스 저장
}
}
return answer;
}
- if문을 사용할필요가 없다.
- i 는 0 부터 순차적으로 돌게되며,
- map 에서 꺼내면 B의 인덱스 값이 나오게 되기 때문이다.
- answer 의 i 값에 map에서 꺼낸 B 의 인덱스를 넣어주기만 하면 된다.
private static int[] solve(int[] a, int[] b) {
int[] result = new int[a.length];
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i=0; i<a.length; i++) {
//B의 값, 인덱스 i
map.put(b[i],i);
}
for (int i=0; i<a.length; i++) {
// i 는 0 부터 배열길이까지 걸림, 0 ,1 ,2 ,3... 순차
//a[i] 원소 값으로 맵에서 꺼내면 저장했던 인덱스 추출 가능함.
result[i] = map.get(a[i]);//인덱스 추출
}
return result;
}
11월 03, 2020 11:24:04 오후 com.sun.org.slf4j.internal.Logger warn
경고: [1, 4, 3, 2, 0]
'막무가내로 삽질하는 알고리즘' 카테고리의 다른 글
MaximumSubArray (0) | 2020.11.03 |
---|---|
Longest Substring With At Most Two Distinct (0) | 2020.10.26 |
UniqueEmailAddresses (0) | 2020.10.25 |
PlusOne (0) | 2020.10.25 |
KClosest (0) | 2020.10.25 |