더스트스더
공대생블로그
더스트스더
전체 방문자
오늘
어제
  • 분류 전체보기 (20)
    • 코딩 (15)
      • 코테 (12)
    • 디지털월드 (2)
      • 통신 (1)
      • 회로 (1)
    • 에러 해결 (2)
    • 취준일기 (1)

블로그 메뉴

  • 글쓰기
  • 블로그 관리

공지사항

인기 글

태그

  • Node.js
  • 데이터통신
  • 자바스크립트
  • npm
  • 통신
  • 논리회로
  • 프로토콜

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
더스트스더

공대생블로그

[프로그래머스] 기능개발 (스택/큐)
코딩/코테

[프로그래머스] 기능개발 (스택/큐)

2023. 8. 29. 00:01

문제 원문

 

 

 

 

 

문제 파악

1. 각 기능은 100%때 배포됨 -> 배포 날짜는 잔여 기간과 스피드에 따라 결정됨.

2. 배포 날짜를 나열했을 때, 뒷 요소가 앞 요소보다 작을 경우 앞 요소보다 빨리 배포되지 않고 앞 요소가 배포될때 함께 배포됨. -> 앞 요소(기준) ~ 앞 요소보다 작거나 같은 요소들까지 함께 배포됨.

3. 각 날짜마다 배포되는 개수를 배열에 저장하여 반환하라.

 

 

코드 적용

function solution(progresses, speeds) {
        
    let days = [];		// 배포 날짜를 저장할 배열
    let result = [];	// 최종 결과
    let count = 0;		// 같은 날짜에 배포되는 기능의 수(result의 요소)

	// 잔여 진도와 속도로 배포 날짜 구하기
    progresses.forEach((v,i) => {	
        const day = Math.ceil((100-v)/speeds[i]);	// Math.ceil 함수로 실수 반올림(JS 특성)
        days.push(day);		// 각 날짜를 days에 추가
    })

    let pivot = days[0];	// days의 첫 요소를 기준으로 삼음

    days.forEach((v,i) => {
		
        // 기준 이하일 시, 같은 날짜에 배포되므로 횟수 증가
        if(pivot >= v) count++;
        
        // 기준 초과일 시, 누적된 횟수를 result에 push 한 후 횟수를 초기화
        else {						
            result.push(count);
            count = 0;
            
            // 이제 이 요소가 다음 기준이 된다
            pivot = v;
            if(pivot >= v) count++;
        }

		// days의 끝에 도달했을 때, 마지막으로 횟수를 push 하고 반복문을 종료
        if (i === days.length - 1) {
            result.push(count);
        }
    })
    
    return result;
}

 

 

 

제일 좋아요 많은 답(다른 사람 거)

function solution(progresses, speeds) {
    let answer = [0];
    let days = progresses.map((progress, index) => Math.ceil((100 - progress) / speeds[index]));
    let maxDay = days[0];

    for(let i = 0, j = 0; i< days.length; i++){
        if(days[i] <= maxDay) {
            answer[j] += 1;
        } else {
            maxDay = days[i];
            answer[++j] = 1;
        }
    }

    return answer;
}

 

 

TIL

코딩 자체를 너무 오랜만에 해서 자바스크립트 배열 함수 다 까먹고 초반에 엄청 헤맸다...

코테 왤케 어려움

 

1. JS의 특성상, 실수의 사칙연산 및 대소비교는 오류가 심하다. 날짜의 경우, Math.ceil(반올림 함수)을 사용하여 오류를 막는 것이 좋다.

2. 문제를 빠르게 파악하고 적절한 자료구조+알고리즘으로 단순화 시키는 것이 중요. 문제 잘못 이해하면 망한다...

3. 자료구조, 알고리즘을 먼저 복습해야 하려나? 일단 2번 + 오류 최적화 정도 해보고..

4. 아 그리고 반복문 스코프 엄청 중요하다 손으로 알고리즘 쓴 다음에 코드 짜야됨

 

 

'코딩 > 코테' 카테고리의 다른 글

[프로그래머스] 올바른 괄호 (스택/큐)  (0) 2023.09.04
[구름] 합격자 찾기  (0) 2023.04.06
[자바스크립트] 두 날짜 사이의 일수 구하기  (0) 2022.06.17
[자바스크립트] 각 자릿수의 합으로 홀수 짝수 구별하기  (0) 2022.06.03
[자바스크립트] 배열 속 부메랑 패턴의 개수 구하기  (0) 2022.06.01
    '코딩/코테' 카테고리의 다른 글
    • [프로그래머스] 올바른 괄호 (스택/큐)
    • [구름] 합격자 찾기
    • [자바스크립트] 두 날짜 사이의 일수 구하기
    • [자바스크립트] 각 자릿수의 합으로 홀수 짝수 구별하기
    더스트스더
    더스트스더
    열심히살자

    티스토리툴바