영상
문제
<script>
/*
[문제]
[1] a배열의 값들을 순차적으로 검사한다.
[2] 연속으로 같은 값이 두 개가 있다면,
[3] 두 수를 삭제하고 그 합을 다시 그 자리에 저장한다.
[4] 연속으로 같은 값이 없을 때까지 (1~3)을 반복한다.
b = [8,4,2,2,8,4,4] , 세번째 자리 2, 2가 연속이다.
b = [8,4,4,8,4,4] , 두번째 자리 4, 4가 연속이다.
b = [8,8,8,4,4] , 첫번째자리 8, 8 이 연속이다.
b = [16,8,4,4] , 세번째자리 4, 4 이 연속이다.
b = [16,8,8] , 두번째자리 8, 8 이 연속이다.
b = [16,16] , 첫번째자리 16, 16 이 연속이다.
b = [32] , 연속된 수가 없다.
[정답]
b = [32, 0, 0, 0, 0, 0, 0]
*/
let a = [8, 4, 2, 2, 8, 4, 4];
let b = [0, 0, 0, 0, 0, 0, 0];
</script>
Java
복사
해설
전체반복은 무한반복으로 처리
a의 인덱스 끝에 도달했을 종료
1. a배열의 첫번째 숫자를
b배열에 저장한다.
= a배열과 b배열의 인덱스가 다르다!
2. a배열의 값과 b배열의 값이 같은지 여부를 확인한다.
3. 두 값이 같지 않을 때,
b배열의 "다음 위치"에 a값을 저장한다.
4. 두 값이 서로 같을 때,
b배열의 "현재 위치"에
b배열 값의 2배의 값을 저장한다.
무한반복을 돌다가,
모든 값이 서로 다를 때 반복을 종료한다.
JavaScript
복사
<script>
/*
[문제]
[1] a배열의 값들을 순차적으로 검사한다.
[2] 연속으로 같은 값이 두 개가 있다면,
[3] 두 수를 삭제하고 그 합을 다시 그 자리에 저장한다.
[4] 연속으로 같은 값이 없을 때까지 (1~3)을 반복한다.
b = [8,4,2,2,8,4,4] , 세번째 자리 2, 2가 연속이다.
b = [8,4,4,8,4,4] , 두번째 자리 4, 4가 연속이다.
b = [8,8,8,4,4] , 첫번째자리 8, 8 이 연속이다.
b = [16,8,4,4] , 세번째자리 4, 4 이 연속이다.
b = [16,8,8] , 두번째자리 8, 8 이 연속이다.
b = [16,16] , 첫번째자리 16, 16 이 연속이다.
b = [32] , 연속된 수가 없다.
[정답]
b = [32, 0, 0, 0, 0, 0, 0]
*/
let a = [8, 4, 2, 2, 8, 4, 4];
let b = [0, 0, 0, 0, 0, 0, 0];
let index = 0;
b[index] = a[index];
let i = 1;
while(true) {
if(b[index] == a[i]) {
b[index] = b[index] * 2;
while(true) {
let check = false;
for(let j=0; j<index; j++) {
if(b[j] == b[j + 1]) {
b[j] = b[j] * 2;
b[j + 1] = 0;
index -= 1;
check = true;
}
}
if(check == false) {
break;
}
}
} else {
b[index + 1] = a[i];
index += 1;
}
i += 1;
if(i == a.length) {
break;
}
}
document.write(b + "<br>");
</script>
Java
복사