알고리즘 문제풀이_최단거리, 숫자반복

YOOJIN PARK·2021년 12월 14일
0

알고리즘 문제

목록 보기
1/1

오늘부터 알고리즘 수업..
분명 고등학교때 공부했던 것들인데 왜이리 생소한지
손으로 세번씩은 써봐야 이해가 안간다..ㅠㅠ
그래서 안보고 설명하면서 풀이를 써가면서 공부를 더해본다.

1. 1부터 10000까지 8이 몇번 반복하는가?

( 8888의 경우에는 4번 카운팅 되어야 한다.)

(Array(10000).fill(1).map((value, index) => value+index)+'').split('8').length-1;
Array(10000).fill(1)
  • 우선 10000개짜리 배열을 하나 만들고 1로 채운다.
map((value, index) => value+index)+'').
  • 각각의 값이 모두 1이기 때문에 인덱스와 더해주면 1~10000까지 차례대로 오는 배열이 만들어 진다.
  • 그리고 split로 찢기 위해서 ''을 이용해 문자열로 바꿔준다.
.split('8')
  • 그리고 8을 기준으로 찢어준다. 찢어진 덩어리 수로 8의 갯수를 알 수 있다.
.length-1;
  • 헷갈렸던 건 이부분!! 왜 -1을 해야하지 생각했는데, 떡을 4번 나오면 5조각이 나온다는 이야기에 바로 이해갔다.

👩‍🎓 완전 몸풀기라는데, 몸이 덜풀린거라 믿어 본다.

2. 1차원의 점들이 주어졌을때 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시요.

(단 점들의 배열은 모두 정렬되어 있다고 가정한다)

let s = [1, 3, 4, 8, 13, 17, 20];
let arr = new Array ();
  • 일단 s라는 배열이 주어졌다고 가정하고, 이를 정리해서 담을 새로운 배열을 만들어 준다.
  • 배열은 새롭게 만들려면 new를 이용해 만들어야 한다.
for (let i= 1; i<s.length;  i++) {
    arr.push(s[i]-s[i-1])
}
  • 배열은 이미 정렬되어 있는 상태이기 때문에 각각의 차는 자신의 앞뒤와의 차가 가장 작게 된다.
  • 그렇기 때문에 순서대로 차를 구해준다(차가 작다 = 짧은 거리다)
  • 그리고 새로운 배열인 arr에 넣어준다
  • 중요한 점은! i가 1부터 시작해여 0번째 배열도 넣을 수 있다.
    이게 아니면 let i =0 을하고, length-1, 그리고 [i+1] -[i]로 바꿔줘야 한다.(요소가 없으면 오류남)
let result = arr.indexOf(Math.min(...arr));
  • 그럼 arr는 각 요소의 차로 이루어진 배열이 되기 떄문에 여기서 가장 작은 값을 구해준다.
  • indexOf를 통해 그 값을 구하기 위해 전개 구문을 이용해 arr를 키와 값으로 확장해 준다.
console.log(s[result], s[result+1])
  • 마지막으로 result의 값은 (0[1-0],1[2-1],2[3-2]..) 이런식으로
    인덱스가 계산된 값보다 하나 작기 때문에 s[result] 와 s[result+1]를 호출해준다.

💁‍♀️ 오히려 2번이 더 쉬운느낌!
1번은 한번에 호로로록 하려는 느낌이었다면 좀더 한단계한단계 밟아가는 문제라 좀 더 쉽게 느껴진거 같다.


매일 매일 알고리즘 문제 풀고, 베이스를 쌓아가면 언젠가는 잎도 달리고, 열매도 맺고 하겠지: )

profile
개발자를 꿈꾸는 개린이입니다.

0개의 댓글