알고리즘

bclef25·2020년 1월 13일
0

input [1,2,3,4] => output8
면접에서 손코딩을 하게 되었던 문제이다.
배열의 숫자를 역순으로 뒤집어서 각 인덱스간의 원래 배열과의 차이값을 다 더해서 리턴하는 문제였다. 문제를 잘못이해하고 역순으로 카운트 하면서 뒤집는걸 만들었었는데..원래의 목적과 그때 알려주신 방법으로 다시 로직을 작성해 보았다. (원래는 스트링으로 들어온다는 전제 였는데 스플릿하고 넘버변환해서 사용후 다시 조인해서 스트링으로 만들면 되는 간단한 과정이고 알고리즘과는 크게 관계없고 번거롭기 때문에 제외하였다. 넘버타입 외에 다른것이 들어올 경우의 예외처리도 하지 않았다.)

const sum=(nums)=>{
   let count = 0
  for(let i = 0 ;  i < nums.length ; i++){
   if(nums[i] - nums[nums.length-i-1] < 0){
      count = ((nums[i] - nums[nums.length-i-1])*-1)*2+count
   }
     count = (nums[i] - nums[nums.length-i-1])*2+count
  }
  return count
}

sum([2,3,4,5])

간단하게 작성해 보았는데 이게 생각해보니 홀수배열은 어쩌지 라는 생각이 들었다.
다시 곰곰히 생각해보니 어떤 홀수 배열이라도 가운데의 숫자는 같을것이기 때문에
결국 같은 인덱스 번호로 와도 두 수를 빼서 0이기 때문에 어떻게 곱하고 더해도 0이 나올거라서 결과에는 영향을 주지 않았다.

결론..손코딩은 실제 코딩과 다르게 더 여려운 느낌이다 콘솔을 찍을 수도 없고 익숙하지도 않다..하지만 일을 하게 되면 팀원들과 소통을 항상 노트북으로 코드를 써서 할거라고는 생각되지 않기때문에 내가 손으로 로직을 짜고 설명하는것도 중요하다고 생각이 든다. 역시 개발은 공부할게 끝이 없다..ㅎ
그래서 재밌기도 하지만..

profile
프론트 개발자

0개의 댓글