알고리즘🅰/제주코딩베이스캠프 프로그래머스 문제 풀이

[알고리즘 풀이 코딩도장_Lv2] 구글 입사문제 중에서, 다음 입사문제 중에서

개발조각 2023. 3. 21. 21:37
728x90
반응형

*제주코딩베이스캠프의 JavaScript 알고리즘 100일 챌린지를 참고로 정리하고 있습니다.*

36~50까지는 코딩도장에서 Lv. 2~3

https://codingdojang.com/

 

코딩도장

프로그래밍 문제풀이를 통해서 코딩 실력을 수련

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
반응형