JavaScript - 프로그래머스 레벨 : 2(7) - ORDER BY '정답률'

먹보·2023년 3월 14일
0

1. H-Index

문제 설명

H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다.
어떤 과학자가 발표한 논문 n편 중, h번 이상 인용된 논문이 h편 이상이고 나머지 논문이 h번 이하 인용되었다면 h의 최댓값이 이 과학자의 H-Index입니다.
어떤 과학자가 발표한 논문의 인용 횟수를 담은 배열 citations가 매개변수로 주어질 때, 이 과학자의 H-Index를 return 하도록 solution 함수를 작성해주세요.

예제

코드

function solution(citations) {
    let count = 0;
    
    citations.sort((a,b) => b-a).forEach((el,i) => {
      if (el >= i+1) count++
    })
    
    return count;
}

🗒️코멘트

문제 자체의 설명이 굉장히 난해하다...처음에는 한 과학자가 발표한 각 논문의 인용 수가 배열 안에 주어지고 논문들의 인용수의 평균 보다 많이 인용된 논문의 갯수를 찾는 것인줄 알았으나..그게 아니었고..왜 인지는 모르겠으나 프로그래머스의 질문하기 섹션에서 테스트 케이스를 파악하고 다른 사람들 (나처럼 문제를 이해하지 못한 사람들)의 의견을 보니

인용수를 내림차순으로 정렬 후 각 각의 인용수를 인덱스+1의 값과 비교했을 때 그것보다 크거나 같은 논문의 수를 찾는 것이 H-Index라고 한다

라는 사실을 보고 바로 그 방법으로 접근해서 풀었더니 답이 맞았다..

그래서 위키피디아에 직접 검색을 해보니..정말이었다

이 설명만 제대로 해주었다면 난이도 1짜리 문제였을수도 있을 것이다.


2. 괄호 회전하기

문제 설명

다음 규칙을 지키는 문자열을 올바른 괄호 문자열이라고 정의합니다.

  • (), [], {} 는 모두 올바른 괄호 문자열입니다.
  • 만약 A가 올바른 괄호 문자열이라면, (A), [A], {A} 도 올바른 괄호 문자열입니다. 예를 들어, [] 가 올바른 괄호 문자열이므로, ([]) 도 올바른 괄호 문자열입니다.
  • 만약 A, B가 올바른 괄호 문자열이라면, AB 도 올바른 괄호 문자열입니다. 예를 들어, {} 와 ([]) 가 올바른 괄호 문자열이므로, {}([]) 도 올바른 괄호 문자열입니다.

대괄호, 중괄호, 그리고 소괄호로 이루어진 문자열 s가 매개변수로 주어집니다. 이 s를 왼쪽으로 x (0 ≤ x < (s의 길이)) 칸만큼 회전시켰을 때 s가 올바른 괄호 문자열이 되게 하는 x의 개수를 return 하도록 solution 함수를 완성해주세요.

예제

코드

function solution(s) {
    const stack = [];
    let count = 0;
    let isRight = true;
    if (s.length % 2 === 1) return 0;

    for (let i = 0; i < s.length; i++){
        let candidate = s.slice(i) + s.slice(0, i);
        isRight = true;
        for (let word of candidate) {
            if (word === "(" || word === "{" || word === "[") stack.push(word);
            else {
                let leftWord = stack.pop();
                if (word === ")" && leftWord === "(") continue;
                if (word === "}" && leftWord === "{") continue;
                if (word === "]" && leftWord === "[") continue;
                isRight = false;
                break;
            }
        }
        if (isRight) count++;
    }
    return count;
}

🗒️코멘트

항상 이런 문제는 split을 사용해서 풀었던 경험이 있는데, 이번 만큼은 문자열의 기본 format을 유지한채로 풀어보기로 하였다.

꽤나 직관적인 풀이법이지만 나름 잘 풀었다고 생각한다.

profile
🍖먹은 만큼 성장하는 개발자👩‍💻

0개의 댓글