Learning Log/알고리즘 11

[알고리즘] 프로그래머스 추억 점수(js)

Q. 사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다. 그리워하는 사람의 이름을..

[알고리즘] 프로그래머스 콜라 문제(js)

Q. 오래전 유행했던 콜라 문제가 있습니다. 콜라 문제의 지문은 다음과 같습니다. 정답은 아무에게도 말하지 마세요. 콜라 빈 병 2개를 가져다주면 콜라 1병을 주는 마트가 있다. 빈 병 20개를 가져다주면 몇 병을 받을 수 있는가? 단, 보유 중인 빈 병이 2개 미만이면, 콜라를 받을 수 없다. 문제를 풀던 상빈이는 콜라 문제의 완벽한 해답을 찾았습니다. 상빈이가 푼 방법은 아래 그림과 같습니다. 우선 콜라 빈 병 20병을 가져가서 10병을 받습니다. 받은 10병을 모두 마신 뒤, 가져가서 5병을 받습니다. 5병 중 4병을 모두 마신 뒤 가져가서 2병을 받고, 또 2병을 모두 마신 뒤 가져가서 1병을 받습니다. 받은 1병과 5병을 받았을 때 남은 1병을 모두 마신 뒤 가져가면 1병을 또 받을 수 있습니다..

[알고리즘] 로마자에서 숫자로 바꾸기(js)

Q. 1~3999 사이의 로마자 s를 인자로 주면 그에 해당하는 숫자를 반환해주세요. 로마 숫자를 숫자로 표기하면 다음과 같습니다. Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 로마자를 숫자로 읽는 방법은 로마자를 왼쪽부터 차례대로 더하면 됩니다. III = 3 XII = 12 XXVII = 27 입니다. 그런데 4를 표현할 때는 IIII가 아니라 IV 입니다. 뒤의 숫자에서 앞의 숫자를 빼주면 됩니다. 9는 IX입니다. I는 V와 X앞에 와서 4, 9 X는 L, C앞에 와서 40, 90 C는 D, M앞에 와서 400, 900 A. function romanToNum(s) { //로마자:숫자 객체 변수는 romeNum const romeNum = { 'I' :..

[알고리즘] 문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요. (js)

Q. 문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요. A. 내 답 let strlist = ["We", "are", "the", "world!"] function solution(strlist) { let answer = []; for(let i=0; i strlist.map(str => str.length); 문제 해결 과정 우선, 배열의 모든 인덱스에 접근해서 length를 받아오기 위해 for문을 돌렸다 그리고 나는 이걸 answer에 +=로 넣으려고 했다 내 answer의 초기값은 []였는데 그러다보니 length가 string으로 받아와졌다 어떻게 이걸 다시 number로 바꿔야하지 하다가 여..

[알고리즘] 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. (js)

Q. 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다. 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요. 예각 : 0

[알고리즘] 자바스크립트 알고리즘 문제 : 머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. (js)

Q. 머쓱이는 40살인 선생님이 몇 년도에 태어났는지 궁금해졌습니다. 나이 age가 주어질 때, 2022년을 기준 출생 연도를 return 하는 solution 함수를 완성해주세요. A. 내 답 function solution(age) { let answer = 2022 - age + 1; return answer; } 더 좋은 답 function solution(age) { return new Date().getFullYear() - age + 1; } 문제 해결 과정 당연히 단순하게 계산을 해서 구했다 Date() 함수 몰랐던 건 아니지만 이럴 때 척척 사용하는 사람들 새삼 대단스러웠다 TIL Date.prototype.getFullYear() https://developer.mozilla.org/k..

[알고리즘] 자바스크립트 알고리즘 문제 : 정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요. (js)

Q. 정수 num1과 num2가 매개변수로 주어집니다. 두 수가 같으면 1 다르면 -1을 retrun하도록 solution 함수를 완성해주세요. A. 내 답 function solution(num1, num2) { if (num1 == num2) { return 1 } else { return -1 } } 더 좋은 답 function solution(num1, num2) { var answer = num1 === num2 ? 1 : -1; return answer; } 문제 해결 과정 답이 나오는 것에만 집중해서 더 좋은 코드를 짜는 법은 생각하지 못했다 당연히 삼항연산자를 쓰면 더 간결한 답을 낼 수 있는데,,, 다음에는 답을 내는 것보단 간결한 코드를 작성하는 것에 집중해야겠다 TIL 삼항연산자 ht..

[알고리즘] 자바스크립트 알고리즘 문제 : 문제 등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요. (js)

Q. 등차수열 혹은 등비수열 common이 매개변수로 주어질 때, 마지막 원소 다음으로 올 숫자를 return 하도록 solution 함수를 완성해보세요. A. function solution(common) { if (common[2] - common[1] === common[1] - common[0]) { return common.pop() + common[1] - common[0]; } else { return common.pop() * (common[1] / common[0]); } } TIL Array.prototype.pop() pop() 메서드는 배열에서 마지막 요소를 제거하고 그 요소를 반환한다 ex. const animal = ['cat', 'dog', 'rabbit', 'lion'] co..

[알고리즘] 자바스크립트 알고리즘 문제 : strs은 단어가 담긴 배열입니다.공통된 시작 단어(prefix)를 반환해주세요. (js)

Q. strs은 단어가 담긴 배열입니다. 공통된 시작 단어(prefix)를 반환해주세요. 예를 들어 strs = ['start', 'stair', 'step'] return은 'st' strs = ['start', 'wework', 'today'] return은 '' A. function getPrefix(strs) { if (strs.length === 0) return ''; let prefix = strs[0]; for (let i = 1; i < strs.length; i++) { while (strs[i].indexOf(prefix) !== 0) { prefix = prefix.substring(0, prefix.length - 1); } } return prefix; } 문제 해결 과정 우선 ..