250x250
250x250
JinSeopKim
Hello World!
JinSeopKim
전체 방문자
오늘
어제
  • 분류 전체보기 (168)
    • Artificial intelligence (14)
      • DeepDiveToAI (3)
      • Pytorch (3)
      • Etc (8)
    • Back-end (19)
      • Spring (10)
      • JPA (9)
    • Language (24)
      • Python (3)
      • Java (11)
      • Swift (10)
    • Math (4)
      • Linear Algebra (4)
    • CodingTest (79)
      • Algolithm (12)
      • Backjoon (25)
      • Programmers (42)
    • Etc (27)
      • Book Review (3)
      • Adsp (6)
      • Life (2)
      • Docker (1)
      • odds and ends (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • GitHub

인기 글

태그

  • java
  • 문제풀이
  • 백준
  • AI
  • 머신러닝
  • 개발자
  • uArm
  • DP
  • BFS
  • 카카오
  • 개발
  • 코딩테스트
  • 파이썬
  • ADsP
  • 알고리즘
  • 프로그래머스
  • BOJ
  • certificate
  • 선형대수
  • 구현
  • JAVA8
  • swift
  • 자바
  • Python
  • 브루트포스
  • SpringMVC
  • data
  • ios
  • Front-end
  • JPA

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
JinSeopKim

Hello World!

[PGM_42586] 기능개발 (java)
CodingTest/Programmers

[PGM_42586] 기능개발 (java)

2022. 1. 30. 17:15
728x90
728x90

문제링크

https://programmers.co.kr/learn/courses/30/lessons/42586

 

코딩테스트 연습 - 기능개발

프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는

programmers.co.kr

문제풀이

👨🏻‍💻 핵심 스킬 👨🏻‍💻
구현

기능을 구현을 하고 기능이 구현이 완료되면 업데이트를 수행한다. 이 때, 기능은 순서가 있으며 앞의 기능이 구현이 되지 않았다면 뒤에 기능이 구현이 되어도 배포가될 수 없다. 입력으로 기능의 순서와 진행도 그리고 각 기능별 구현하는 속도가 주어진다. 기능이 배포가 될 때 몇개의 기능이 한번에 배포가 되는지 알아보는 문제이다.

 

이 때, 기능의 진행 정도는 100 이하의 자연수이며 기능의 진행 속도도 100 이하의 자연수이다. 따라서, 아무리 오래 걸리는 케이스여도 반복문을 100번만 반복해주면 문제를 해결해줄 수 있다.

 

따라서, 개발과 업데이트 이렇게 두가지 역할을 수행하는 기능을 구현하여 문제를 해결하여 주었다. 이 때 업데이트에서는 break를 활용하여 배포시 얼마나 많이 업데이트를 시켜야하는지 계산해주었다.

 

구현코드

package pgm_42586;

import java.util.ArrayList;

public class Solution {
    public Integer[] solution(int[] progresses, int[] speeds) {

        ArrayList<Integer> result = new ArrayList<>();
        int num = 0;
        while (num != progresses.length){
            develop(progresses,speeds);
            int updateCount = update(progresses, num);
            if(updateCount != 0){
                result.add(updateCount);
                num += updateCount;
            }
        }

        return result.toArray(new Integer[0]);
    }

    public void develop(int[] progresses, int[] speed){
        for(int i = 0; i < progresses.length; i++){
            progresses[i] += speed[i];
        }
    }

    public int update(int[] progresses, int now){
        int count = 0;
        for(int i = now; i < progresses.length; i++){
            if(progresses[i] > 99){
                count++;
            }
            else
                break;
        }
        return count;
    }
}

 

시간복잡도

develop이 이루어지는 과정이 가장 시간이 오래걸리게 된다.

n이 progresses의 크기라고 하면, O(n)가 된다.

잘못된 지식이나 궁금한 내용이 있을 경우 편하게 댓글 남겨주시면 감사하겠습니다 :)

 

728x90
728x90
저작자표시 비영리 (새창열림)

'CodingTest > Programmers' 카테고리의 다른 글

[PGM_42626] 더 맵게 (Java)  (0) 2022.01.30
[PGM_42626] 더 맵게 (Java)  (0) 2022.01.30
[PGM_12899] 124 나라의 숫자 (Java)  (0) 2022.01.29
[PGM_62048] 멀쩡한 삼각형 (java)  (0) 2022.01.27
[카카오] 양궁대회 (java)  (0) 2022.01.22
    'CodingTest/Programmers' 카테고리의 다른 글
    • [PGM_42626] 더 맵게 (Java)
    • [PGM_42626] 더 맵게 (Java)
    • [PGM_12899] 124 나라의 숫자 (Java)
    • [PGM_62048] 멀쩡한 삼각형 (java)
    JinSeopKim
    JinSeopKim
    기록📚

    티스토리툴바