Search

이차반복문5_문제01_같은수합치기

대분류
STEP07 이차반복문
문제 난이도
LV08
소분류
이차반복문5_문제

영상

문제

<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
복사