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

먹보·2023년 3월 30일
0

1. 연속 부분 수열 합의 개수

문제 설명

철호는 수열을 가지고 놀기 좋아합니다. 어느 날 철호는 어떤 자연수로 이루어진 원형 수열의 연속하는 부분 수열의 합으로 만들 수 있는 수가 모두 몇 가지인지 알아보고 싶어졌습니다. 원형 수열이란 일반적인 수열에서 처음과 끝이 연결된 형태의 수열을 말합니다. 예를 들어 수열 [7, 9, 1, 1, 4] 로 원형 수열을 만들면 다음과 같습니다.

원형 수열은 처음과 끝이 연결되어 끊기는 부분이 없기 때문에 연속하는 부분 수열도 일반적인 수열보다 많아집니다.
원형 수열의 모든 원소 elements가 순서대로 주어질 때, 원형 수열의 연속 부분 수열 합으로 만들 수 있는 수의 개수를 return 하도록 solution 함수를 완성해주세요.

예제

코드

function solution(elements) {
    m = elements.concat(elements)
    const sum = new Set()
    
    for (let i = 0 ; i < elements.length ; i++){
        for (let j = 0 ; j < elements.length ; j++){
            sum.add(m.slice(j,j+i+1).reduce((a,b) => a+b))
        }
    }
    return sum.size
}
///ChatAPI의 답안
function solution(elements) {
  const sums = new Set();
  
  for (let i = 0; i < elements.length; i++) {
    for (let j = i; j < i + elements.length; j++) {
      let sum = 0;
      for (let k = i; k <= j; k++) {
        sum += elements[k % elements.length];
      }
      sums.add(sum);
    }
  }
  
  return sums.size;
}

🗒️코멘트

문제를 직관적으로 접근하였고 이중 for 문을 사용해서 쉽게 풀 수 있었다.

하지만 이중 for문 이외에 풀 방법이 떠오르지 않아 다른 답변들을 봤더니.....1페이지부터 25쪽에 다다르는 모든 페이지가 전부 똑같은 방식으로 문제를 풀었다.

다른 풀이법이 존재하지 않는 것일까?

찾아보기 위해서 ChatGPT의 힘을 빌려보았다.

그래서 나온 답안이..concat을 쓰지 않기 위해 for문 자체에 제약을 둔 것인데...역시..더 느리다.

아직 인간은 위대하다...


2. 기능개발

문제 설명

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다.
또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다.
먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.

예제

코드

function solution(progresses, speeds) {
    var answer = [];
    const functions = progresses.length
    while(answer.reduce((a,b) => a+b,0) !== functions){
        let n = 0;
        for(let i = 0 ; i < speeds.length ; i++){
          progresses[i] += speeds[i]
        }
        while(progresses[0] >= 100){
          n++
          progresses.shift()
          speeds.shift()
        }
        n > 0 ? answer.push(n) : null
    }
    return answer;
}

🗒️코멘트

처음으로 스택과 큐를 제대로 이해한 후 풀어본 문제이다.

어찌보면 가장 근본적인 방식이지만 스택/큐를 알고나서 풀어보니 다르게 다가왔다.

기분이 좋은 문제였다.


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

0개의 댓글