CodingTest/알고리즘 고득점 Kit

기능 개발

  • -
728x90

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

 

프로그래머스

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

programmers.co.kr

 

흠 이번에는 문제를 조금은 빠르게 풀었다. 리스트 컴프리핸션은 분석 때 많이 쓰던 거라 쉬웠는데 문제를 다 풀고 테스트 케이스 11번이 계속 통과가 안 돼서 보니 D를 만들어 주는 과정에서 math.ceil()을 안쓰고 그냥 나눠준 것이 문제였다... 뭔가 계산 방식이 다른 것 같다. ceil을 안 쓰고 푼 다른 사람 풀이를 보니 너무 복잡해서 도무지 이해가 가지 않았다. 또한 이 문제는 내가 푼 것처럼 풀 순 있지만 다른 사람 풀이를 보니 한 명도 나처럼 푼 사람을 찾을 수 없었다. 알고 보니 이 문제는 시간 복잡도라는 알고리즘을 이용해서 푸는 문제였다. 나는 아직 배우지 못한 부분...ㅎㅎ 어찌 됐든 풀긴 했으나 출제의도를 맞추어서 푼 문제는 아니므로 나중에 알고리즘 스터디를 확실히 하면 다시 풀어본 생각이다.

import math
def solution(progresses, speeds):
    answer = []; c =[]
    remaining_pg = [100 - i for i in progresses]
    D = [math.ceil(x / y) for x, y in zip(remaining_pg, speeds)]
    for i in D:
        if len(c)==0 or c[0] >= i:
            c.append(i)
        else:
            answer.append(len(c)); c = []
            c.append(i)
    answer.append(len(c))
    
    print(D)
    return answer

 

 

 

 

아래는 시간복잡도 알고리즘을 푼 사람의 코드이다. 나중에 다시 와서 풀어볼 예정이다.

def solution(progresses, speeds):
    print(progresses)
    print(speeds)
    answer = []
    time = 0
    count = 0
    while len(progresses)> 0:
        if (progresses[0] + time*speeds[0]) >= 100:
            progresses.pop(0)
            speeds.pop(0)
            count += 1
        else:
            if count > 0:
                answer.append(count)
                count = 0
            time += 1
    answer.append(count)
    return answer

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.