알고리즘🅰/제주코딩베이스캠프 프로그래머스 문제 풀이
[알고리즘 풀이 코딩도장_Lv2] 구글 입사문제 중에서, 다음 입사문제 중에서
개발조각
2023. 3. 21. 21:37
728x90
반응형
*제주코딩베이스캠프의 JavaScript 알고리즘 100일 챌린지를 참고로 정리하고 있습니다.*
36~50까지는 코딩도장에서 Lv. 2~3
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
구글 입사문제 중에서_36번째
문제
https://codingdojang.com/scode/393?answer_mode=hide
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
1부터 10,000까지 8이라는 숫자가 총 몇번 나오는가?
8이 포함되어 있는 숫자의 갯수를 카운팅 하는 것이 아니라 8이라는 숫자를 모두 카운팅 해야 한다.
(※ 예를들어 8808은 3, 8888은 4로 카운팅 해야 함)
해결방안
'0123456789101112131415'.split('').filter(v => v === '1')
// (8) ['1', '1' '1', '1', '1' '1', '1', '1']
'0123456789101112131415'.split('').filter(v => v === '1').length
// 8
Array(100).fill(0).map((v, i) => i)
// (100) [0, ... 99]
Array(100).fill(0).map((v, i) => i).toString()
// '0,1,...,99'
Array(100).fill(0).map((v, i) => i).toString().split('')
// 289['0', ','...,'99']
Array(100).fill(0).map((v, i) => i).toString().split('').filter(v=>v==='8').length
// 20
Array(10000).fill(0).map((v, i) => i).toString().split('').filter(v=>v==='8').length
// 4000
소스코드
Array(10000).fill(0).map((v, i) => i).toString().split('').filter(v=>v==='8').length
// 4000
다음 입사문제 중에서_37번째
문제
https://codingdojang.com/scode/408
코딩도장
프로그래밍 문제풀이를 통해서 코딩 실력을 수련
codingdojang.com
1차원의 점들이 주어졌을 때, 그 중 가장 거리가 짧은 것의 쌍을 출력하는 함수를 작성하시오. (단 점들의 배열은 모두 정렬되어있다고 가정한다.)
예를들어 S={1, 3, 4, 8, 13, 17, 20} 이 주어졌다면, 결과값은 (3, 4)가 될 것이다.
해결방안
방법1
s = [1, 3, 4, 8, 13, 17, 20]
index = 0;
minim = Infinity
for(let i=1; i<s.length; i++){
if(s[i] - s[i-1] < minim){
console.log(s[i], s[i-1])
min = s[i] - s[i-1]
}
}
// 3 1
// 4 3
s = [1, 3, 4, 8, 13, 17, 20]
index = 0;
minim = Infinity
for(let i=1; i<s.length; i++){
if(s[i] - s[i-1] < minim){
index = i
min = s[i] - s[i-1]
}
}
index
// 2
s = [1, 3, 4, 8, 13, 17, 20]
index = 0;
minim = Infinity
for(let i=1; i<s.length; i++){
if(s[i] - s[i-1] < minim){
index = i
min = s[i] - s[i-1]
}
}
s[index], s[index-1]
// 4, 3
방법2
s = {1, 3, 4, 8, 13, 17, 20}
ss = s.slice(1) // (6) [3, 4, 8, 13, 17, 20]
s.map((v, i) => [v, ss[i]])
// (7) [[1,3], [3,4], [4,8], [8, 13], [13, 17], [17, 20], [20, undefined]]
s.map((v, i) => [v, ss[i]]).sort((a,b)=> (a[1]-a[0]) - (b[1]-b[0]))
// (7) [[3,4], [1,3], [17, 20], [4,8], [13, 17], [8, 13], [20, undefined]]
s.map((v, i) => [v, ss[i]]).sort((a,b)=> (a[1]-a[0]) - (b[1]-b[0]))[0]
// [3, 4]
소스코드
// 방법1
s = [1, 3, 4, 8, 13, 17, 20]
index = 0;
minim = Infinity
for(let i=1; i<s.length; i++){
if(s[i] - s[i-1] < minim){
index = i
min = s[i] - s[i-1]
}
}
s[index], s[index-1]
// 방법2
s.map((v, i) => [v, ss[i]]).sort((a,b)=> (a[1]-a[0]) - (b[1]-b[0]))[0]
728x90
반응형