본문 바로가기

CS/알고리즘

[230422] 기능개발

반응형

 

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

풀이

첫 번째 풀이

간단하게 생각했음.

function solution(progresses, speeds) {
    let answer = [1];
    
    const arr = progresses.map((progress,i) => Math.ceil((100-progress) / speeds[i]));
    
    for(let i = 1; i < arr.length; i++) { 
        if(arr[i] <= arr[i-1]) answer[answer.length - 1] += 1;
        else answer.push(1)
    }
    return answer;
}
  1. 남은 일수를 담은 배열 arr를 만들고,
  2. arr를 앞에서부터 보면서,
  3. 앞의 날이 현재 날보다 숫자가 크거나 같으면 answer의 마지막 인덱스의 값을 +1
  4. 앞의 날이 현재 날보다 숫자가 작으면 answer에 1을 push
  5. 2~4를 arr의 길이만큼 반복한다.

결과는 … 실패투성이

 

 

 

두 번째 풀이

어데가 잘못됐노 싶었는데,

3~4에서 잘못됐다. 앞의 날과 비교하는 게 아니라, 현재 answer 인덱스에 담은 날들 중에서 max인 값과 비교를 해야 한다.

그래서 변수 max를 추가하여 코드 수정했다.

function solution(progresses, speeds) {
    let answer = [1];
    
    const arr = progresses.map((progress,i) => Math.ceil((100-progress) / speeds[i]));
    
    let max = arr[0];
    for(let i = 1; i < arr.length; i++) { 
        if(arr[i] <= max) answer[answer.length - 1] += 1;
        else {
            max = arr[i]
            answer.push(1);
        }
    }
    
    return answer;
}

 

 

 

다른 사람 풀이 보니까 비슷하게 풀었더라

 

 

 

반응형

'CS > 알고리즘' 카테고리의 다른 글

[230423] 연속 부분 수열 합의 개수  (0) 2023.04.23
[230423] 명예의 전당  (1) 2023.04.23
[230422] 소수 찾기  (0) 2023.04.22
[230422] 추억 점수  (0) 2023.04.22
[230422] 소수 찾기  (0) 2023.04.21