본문 바로가기

알고리즘 풀이

알고리즘 문제풀이 중 하나

화상 채팅 코딩테스트 봤을때 멘붕온 문제인데.. 자다가 생각나서 코드 정리해서 올린다.


일단 문제는 배열중 자신을 제외한 나머지 요소의 곱으로 다시 배열을 재구성 하는 문제이다. 


예를 들면 [1,4,7,2] 가 있다면 반환해야 할 배열은 [56, 14, 8, 28] 이다. 


실제로 보고 멘붕에 빠졌는데... (그만큼 실력이 없어서) 요즘 자료구조하고 알고리즘 문제 푸니까 뭔가 머리에 기름칠이 되는 느낌이다. 그래서 구현한 아래 코드.


function solution(arr) {
let answer = [];

for (let i = 0; i < arr.length; i++) {
let pivot = arr.shift();
answer.push(arr.reduce((a, b) => a * b));
arr.push(pivot);
}
answer = answer.map(value => Number(isTofixed(value)));
return answer;
}

function isTofixed(num) {
return num === num.toFixed(4) ? num : num.toFixed(4);
}


빈 배열을 일단 놔두고, 인자로 받은 배열의 횟수만큼 for문을 반복하는 것이다. 반복할때마다 하는 작업은,


1. arr의 맨 앞을 빼서 변수에 저장해 놓는다. (그럼 맨앞을 제외한 요소들이 배열에 남아있음)

2. 남아있는 배열의 수를 모두 곱해서 answer 배열에 추가한다.

3. 앞에서 빼놨던 변수를 다시 arr맨 뒤에 추가한다.


위 작업을 arr의 길이만큼 반복하면 원하는 답을 얻을 수 있다.


isTofixed 함수를 추가한 이유는 arr의 요소에 소수가 들어올 경우를 대비해서 만들어놨다. 

코딩 테스트때 여러 테스트를 생각해보랬는데.. 그때 수에 0이 들어가는거 하고 소수를 생각해 놓고 함수를 구현했는데 바보같이 요소중 0이 있을 경우를 생각못하고 거기서 쩔쩔매다가 끝나버렸다.


일주일 후에 연락준다고 했는데...


연락이 안온다... 하하하