본문 바로가기

Algorithm

(38)
[프로그래머스/js] 하샤드 수 (reduce를 사용해 값을 누적하기) 문제 : 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요. *하샤드 수 (harshad number) : 주어진 진법에서 그 수의 각 자릿수 숫자의 합으로 나누어떨어지는 자연수를 말한다. 풀이방법: 입력 받은 숫자를 string으로 변환하여 각 자리수를 더해 비교한다. function solution(x) { let answer = true; const num = String(x).split(""); const sum = parseInt(num[0]) + parseInt(num[1..
[프로그래머스/js] 음양더하기 (reduce 사용해서 배열의 합구하기) 문제 : 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요. function solution(absolutes, signs) { var answer = 0; for (let i = 0; i acc + curr, 0) return answer; }
[프로그래머스/js] 숫자 문자열과 영단어 문제 : 입력 되는 숫자에 문자열이 있다면 해당 문자열이 의미하는 원래 숫자로 변경하여 return function solution(s) { const answer = 0; const dictionary = [ {key:'zero',value:0}, {key:'one',value:1}, {key:'two',value:2}, {key:'three',value:3}, {key:'four',value:4}, {key:'five',value:5}, {key:'six',value:6}, {key:'seven',value:7}, {key:'eight',value:8}, {key:'nine',value:9}, ] const includesChar = /[a-zA-z]/ if (includesChar.test(s)) ..
[HackerRank/js] Diagonal Difference 문제 : Given a square matrix, calculate the absolute difference between the sums of its diagonals. For example, the square matrix arr is shown below: function diagonalDifference(n, arr) { let leftToRigth = 0; let rightToLeft = 0; for (let i = 0; i< arr.length; i++) { leftToRigth += arr[i][i]; rightToLeft += arr[i][(arr.length-1-i)] } return Math.abs(leftToRigth-rightToLeft) }
[HackerRank/js] Lonely Integer (배열 내 중복되지 않은 숫자 찾기) 문제 : Given an array of integers, where all elements but one occur twice, find the unique element. 처음에는 지난번 신고회수 누적처럼 map에 담아서 풀고 있었는데 좀 더 간단한 방법이 있어 다시 풀었다. function lonelyinteger(a) { let unique = a.filter(function (val) { return a.indexOf(val) === a.lastIndexOf(val) }) return unique[0] } indexOf(val)은 특정 값과 일치하는 부분을 배열 앞에서 부터 찾고 lastIndexOf(val)은 역순으로 찾는다. 위 방법으로 배열 내에 중복된 값을 가진 숫자를 filter해 준 ..
[Hackerrank/js] 중앙값 찾기 (Math.floor) 문제 : 숫자로 이루어진 배열에서 중앙값을 구하기 *중앙값 : 주어진 값을 정렬했을 때 가운데에 자리하는 숫자. 배열 내 숫자의 갯수가 짝수개인 경우 두 수의 중간값 function findMedian(arr,n) { arr = arr.sort((a,b) => a - b); n = Math.floor(n / 2); return (arr[n]) } Hackerrank는 odd(홀수)만 주어져 제출 했을 때는 합격점을 받았지만, 문제를 읽을 때는 odd가 홀수를 의미하는지도 몰랐기 때문에 사실상 나는 들어오는 정수 n이 홀수인지 짝수인지 상관없이 짰으니 위 코드에는 문제가 있다. 짝수가 들어오는 경우 [0,1,2,3,4,5] function findMedian(arr,n) { arr = arr.sort((a..
[HackerRank/js] Time Conversion (12h를 24h로 변환하기) 문제 : Given a time in 12-hour AM/PM format, convert it to military (24-hour) time. Note: - 12:00:00AM on a 12-hour clock is 00:00:00 on a 24-hour clock. - 12:00:00PM on a 12-hour clock is 12:00:00 on a 24-hour clock. 값은 다음과 같은 형태로 들어온다 07:05:45PM 아웃풋은 아래와 같아야함 내가 선택한 풀이 방법 1. AM 인지 PM인지 확인한다 2. 시, 분, 초로 나누어 배열에 담고 시간을 AM,PM에 맞게 변환 2-1. AM 이면서 '12' (자정) 인 경우는 '00' 으로 변경 2-2. PM이면서 '12'가 아닌 경우는 inp..
[HackerRank/js] Mini-Max Sum (배열의 합을 구해 비교하기) 문제 : Given five positive integers, find the minimum and maximum values that can be calculated by summing exactly four of the five integers. Then print the respective minimum and maximum values as a single line of two space-separated long integers. 설명이 쉽게 잘 나와있어서 바로 풀겠다 싶어서 호다닥 입력했다. function miniMaxSum(arr) { let sumArr = []; for (let i = 0; i x != arr[i]); sumArr.push(n_arr.reduce((a,b) => (a+b..