kohigowild
221024 :: [프로그래머스] 문자열 내 마음대로 정렬하기, 멀리 뛰기, H-Index 본문
문자열 내 마음대로 정렬하기
👾 문제 설명
문자열로 구성된 리스트 strings와, 정수 n이 주어졌을 때, 각 문자열의 인덱스 n번째 글자를 기준으로 오름차순 정렬하려 합니다. 예를 들어 strings가 ["sun", "bed", "car"]이고 n이 1이면 각 단어의 인덱스 1의 문자 "u", "e", "a"로 strings를 정렬합니다.
👾 제한 사항
- strings는 길이 1 이상, 50이하인 배열입니다.
- strings의 원소는 소문자 알파벳으로 이루어져 있습니다.
- strings의 원소는 길이 1 이상, 100이하인 문자열입니다.
- 모든 strings의 원소의 길이는 n보다 큽니다.
- 인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다.
👾 나의 답안
function solution(strings, n) {
strings.sort((a, b) => {
return a[n] === b[n] ? (a > b) - (a < b) : (a[n] > b[n]) - (a[n] < b[n]);
});
return strings;
}
- 각 인덱스 n에 해당하는 값을 비교해서 둘이 같으면 (a > b) - (a - b) 반환, 숫자 정렬처럼 사용할 경우 정상적으로 정렬되지 않는다. 처음에 그냥 a - b로 작성했다가 몇 번 틀렸다. (https://developer-talk.tistory.com/73 참고)
- 그렇지 않으면 (a[n] > b[n]) - (a[n] < b[n]) 반환
👾 다른 사람의 풀이
function solution(strings, n) {
// strings 배열
// n 번째 문자열 비교
return strings.sort((s1, s2) => s1[n] === s2[n] ? s1.localeCompare(s2) : s1[n].localeCompare(s2[n]));
}
localeCompare()
'a'.localeCompare('b')
- a가 b보다 앞에 있으면 -1, 같으면 0, 뒤에 있으면 1 반환
멀리 뛰기
👾 문제 설명
효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 알아내, 여기에 1234567를 나눈 나머지를 리턴하는 함수, solution을 완성하세요. 예를 들어 4가 입력된다면, 5를 return하면 됩니다.
👾 제한 사항
n은 1 이상, 2000 이하인 정수입니다.
피보나치 수열 단어가 안 떠올라서 이렇게 검색했는데 나옴
👾 나의 답안
function solution(n) {
function fibonacci(n) {
if (n <= 2) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
return fibonacci(n) % 1234567;
}
- 첫 답안, 시간 초과 뜸
function solution(n) {
const arr = [0, 1, 2, ...Array(n - 2).fill(0)];
arr.forEach((_, i) => {
if (i > 2) arr[i] = (arr[i - 1] + arr[i - 2]) % 1234567;
else arr[i] = i;
});
return arr[n];
}
아 ㅡㅡ
function solution(n) {
const dp = [0, 1, 2];
if (n <= 2) return dp[n];
for (let i = 3; i <= n; i++) {
dp[i] = (dp[i - 1] + dp[i - 2]) % 1234567;
}
return dp[n];
}
- 테스트 케이스 전부 통과한 답안, 배열 dp에 0, 1, 2 넣어주고 n이 2보다 작거나 같으면 해당 값 바로 반환
- forEach 문으로 작성했던 코드는 for 문으로 돌려서 i를 3으로 초기화하고 피보나치 수열 구현
- 효진아 날도 추운데 멀리 뛰기 연습 같은 거 하지 말고 어지간하면 그냥 집에 있어라
H-Index
👾 문제 설명
H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.
👾 제한 사항
- 과학자가 발표한 논문의 수는 1편 이상 1,000편 이하입니다.
- 논문별 인용 횟수는 0회 이상 10,000회 이하입니다.
💬 참고
https://en.wikipedia.org/wiki/H-index
https://khuelibrary.tistory.com/107
h-index는 쉽게 산출할 수 있습니다. 그림과 같이 연구자의 전체 논문을 피인용 순으로 정렬한 후, 논문의 순번과 피인용 횟수를 비교하여 피인용 횟수가 논문의 순번보다 작아지기 시작하는 직전의 순번이 연구자의 h-index가 됩니다.
출처: https://khuelibrary.tistory.com/107 [경희대학교 공학도서관:티스토리]
👾 나의 답안
function solution(citations) {
citations.sort(function (a, b) {
return b - a;
});
let i = 0;
while (i < citations[i]) {
i++;
}
return i;
}
- 문제가 좀 혼미한데 H-index 구하는 법만 알면 간단하게 구현 가능하다
- 내림차 순으로 정렬한 뒤 인덱스보다 인용 횟수가 큰 값을 가지는 동안 인덱스에 1씩 더해나가고, while문을 빠져나갈 때 i 값 반환
'Algorithm' 카테고리의 다른 글
221027 [프로그래머스] :: 약수의 개수와 덧셈, 소수 만들기, 2개 이하로 다른 비트 (0) | 2022.10.27 |
---|---|
221025 [프로그래머스] :: 폰켓몬, 연속 부분 수열 합의 개수, 피로도 (0) | 2022.10.26 |
221021 :: [프로그래머스] N개의 최소공배수, 캐시, 뉴스 클러스터링 (1) | 2022.10.22 |
221020 :: [프로그래머스] k진수에서 소수 개수 구하기, 프린터, 단어 변환 (0) | 2022.10.20 |
221018 :: [프로그래머스] 2016년, 위장, 네트워크 (1) | 2022.10.19 |