Leetcode Java Restore the Array From Adjacent Pairs
업데이트:
문제
코드
class Solution {
public int[] restoreArray(int[][] adjacentPairs) {
int length = adjacentPairs.length;
Map<Integer, int[]> map = new HashMap<>();
for (int i = 0; i < length; i++) {
int[] adjacentPair = adjacentPairs[i];
if (map.containsKey(adjacentPair[0])) {
map.get(adjacentPair[0])[1] = adjacentPair[1];
} else {
map.put(adjacentPair[0], new int[] { adjacentPair[1], -1000000 });
}
if (map.containsKey(adjacentPair[1])) {
map.get(adjacentPair[1])[1] = adjacentPair[0];
} else {
map.put(adjacentPair[1], new int[] { adjacentPair[0], -1000000 });
}
}
int[] result = new int[length + 1];
int start = -1000000;
for (Map.Entry<Integer, int[]> entry : map.entrySet()) {
if (entry.getValue()[1] == -1000000) {
start = entry.getKey();
break;
}
}
result[0] = start;
for (int i = 1, value = -1000000; i < result.length; i++) {
int[] pair = map.get(start);
int temp = pair[0] == value ? pair[1] : pair[0];
result[i] = temp;
value = start;
start = temp;
}
return result;
}
}
결과
설명
- 아래의 조건을 만족하는 adjacentPairs를 이용하여 인접한 값끼리 묶어서 하나의 배열로 반환하는 문제이다.
- adjacentPairs[i] = [ui, vi]는 ui와 vi가 인접하다는 의미이다.
- 순서에 상관 없이, 조건을 만족하는 배열을 만들어 주어진 문제의 결과로 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- length는 adjacentPairs의 길이를 저장한 변수이다.
- map은 adjacentPairs의 임의 값에 대한 연관된 값들을 모아 저장할 변수로, HashMap으로 초기화한다.
- 0부터 length 미만까지 i를 증가시키면서 아래를 수행한다.
- adjacentPair에 adjacentPairs의 i번째 배열을 넣어준다.
- map에 adjacentPair[0]의 값이 map 내 키로 존재하는지에 따라 아래를 수행한다.
- 존재하는 경우, 해당 키의 값인 배열에 adjacentPair[1]의 값을 넣어준다.
- 존재하지 않는 경우, 해당 키에 연관된 adjacentPair[1]의 값과 값 범위의 하한값인 -100000을 배열로 넣어준다.
- map에 adjacentPair[1]의 값이 map 내 키로 존재하는지에 따라 아래를 수행한다.
- 존재하는 경우, 해당 키의 값인 배열에 adjacentPair[0]의 값을 넣어준다.
- 존재하지 않는 경우, 해당 키에 연관된 adjacentPair[0]의 값과 값 범위의 하한값인 -100000을 배열로 넣어준다.
-
start는 시작 값을 찾기 위한 변수로 값의 하한 값인 -100000으로, result는 결과를 넣을 배열로 $length + 1$ 크기의 정수 배열로 초기화한다.
- map을 순환하면서 값인 배열의 두 번째 값이 -100000인 연관된 값이 하나만 존재하는 경우, start에 해당 key 값을 넣고 반복을 종료한다.
- 순서는 상관 없으므로, 시작 값이든 종료 값이든 상관이 없다.
-
시작 값인 result[0] 값에 start를 넣어준다.
- value는 값의 하한 값인 -10000으로 정의하고, 1부터 result의 길이 미만까지 i를 증가시키면서 아래를 반복한다.
- pair에 map의 start번째 값을 꺼내 넣어준다.
- temp에 pair의 첫 값이 value와 같으면 두 번째 값을, 아니면 첫 번째 값을 넣어준다.
- result[i]에 temp를, value에 start를, start에 temp를 순차적으로 넣어준다.
- 반복이 완료되면 연관된 값들을 모아 저장한 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기