Leetcode Java Distant Barcodes
업데이트:
문제
코드
class Solution {
public int[] rearrangeBarcodes(int[] barcodes) {
int length = barcodes.length;
for (int i = 1; i < length; i++) {
if (barcodes[i] == barcodes[i - 1]) {
int j = i + 1;
while (j < length && barcodes[i] == barcodes[j]) {
j++;
}
if (j < length) {
barcodes[i] = barcodes[j];
barcodes[j] = barcodes[i - 1];
}
}
}
for (int i = length - 2; i >= 0; i--) {
if (barcodes[i] == barcodes[i + 1]) {
int j = i - 1;
while (j >= 0 && barcodes[j] == barcodes[i]) {
j--;
}
if (j >= 0) {
barcodes[i] = barcodes[j];
barcodes[j] = barcodes[i + 1];
}
}
}
return barcodes;
}
}
결과
설명
-
barcodes의 각 숫자들의 인접한 숫자들끼리 동일하지 않은 값으로 재배치하는 문제이다.
-
length는 barcodes의 길이를 저장한 변수이다.
- 1부터 length까지 i를 증가시키며 barcodes의 앞에서 뒤 순서로 아래를 반복하여 순서를 다시 섞어준다.
- barcodes의 i번째 값과 $i - 1$번째 값이 동일한 경우, 아래를 수행한다.
- j는 바꿀 값의 위치를 저장할 변수로, $i + 1$로 초기화하여 j가 length 미만이면서 barcodes의 i번째 자리의 값과 j번째 자리의 값이 동일할 때 까지 j를 증가시켜준다.
- j가 length 미만인 값을 찾은 경우, barcodes의 i번째 위치에 j번째 값을 j번째 위치에 $i + 1$번째 값을 넣어 값을 섞어준다.
- barcodes의 i번째 값과 $i - 1$번째 값이 동일한 경우, 아래를 수행한다.
- $length - 2$부터 0 이상일 때 까지 i를 감소시키며 barcodes의 뒤에서 앞 순서를 아래를 반복하여 순서를 다시 섞어준다.
- barcodes의 i번째 값과 $i + 1$번째 값이 동일한 경우, 아래를 수행한다.
- j는 바꿀 값의 위치를 저장할 변수로, $i - 1$로 초기화하여 j가 0 이상이면서 barcodes의 j번째 자리의 값과 i번째 자리의 값이 동일할 때 까지 j를 감소시켜준다.
- j가 0 이상인 경우 값을 찾은 경우, barcodes의 i번째 위치에 j번째 값을 j번째 위치에 $i + 1$번째 값을 넣어 값을 섞어준다.
- barcodes의 i번째 값과 $i + 1$번째 값이 동일한 경우, 아래를 수행한다.
- 위의 두 반복이 완료되어 동일한 값이 인접하지 않도록 섞은 barcodes를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기