막무가내로 삽질하는 알고리즘

Find Anagrams Mapping

Jungsoomin :) 2020. 11. 3. 23:27
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