[HackerRank] Sequence Equation

아르당·2023년 11월 12일
0

HackerRank

목록 보기
17/109
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

문제

정수 n이 연속해서 주어진다. p(1), p(2), ..., p(n) 각 요소들은 별개이며 1 <= p(x) <= n로 이루어진다. 각 x는 1 <= x <= n이고, 1부터 n까지 증가한다. y가 p(p(y)) ≡ x 인 것을 찾아야 한다. 그리고 반환하는 배열에 y 값들이 유지해야 한다.

Example

p = [5, 2, 1,3 ,4]

1에서 5사이인 x는 다음과 같다.

  1. x = 1 ≡ p[3], p[4] = 3 이니까 p[p[4]] = 1
  2. x = 2 ≡ p[2], p[2] = 2 이니까 p[p[2]] = 2
  3. x = 3 ≡ p[4], p[5] = 4 이니까 p[p[5]] = 3
  4. x = 4 ≡ p[5], p[1] = 5 이니까 p[p[1]] = 4
  5. x = 5 ≡ p[1], p[3] = 1 이니까 p[p[3]] = 5

y의 값은 [4, 2, 5, 1, 3]이다.

Function Description

permutationEquation 함수를 완성해라.
permutationEquation 함수는 아래와 같은 매개변수를 가지고 있다.

  • int p[n]: 정수의 배열

Return

  • int[n]: 1부터 n까지 x에 대한 y 값

Constraints

  • 1 <= n <= 50
  • 1 <= p[i] <= 50, 단 1<= i <= n
  • 각 요소는 중복되지 않는다.

전체 코드

public static List<Integer> permutationEquation(List<Integer> p) {
	int[] arr = new int[p.size()];

	for(int i = 1; i <= p.size(); i++){
		arr[p.get(p.get(i - 1) - 1) - 1] = i;
	}

	List<Integer> result = Arrays.stream(arr).boxed().collect(Collectors.toList());

	return result;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글