Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

김찬양의 개발일지

11일차. 기사단원의 무기 본문

코딩테스트/Programmers Level 1

11일차. 기사단원의 무기

자유로운영혼이다냥 2023. 12. 4. 22:30

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

 

프로그래머스

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

programmers.co.kr

문제

풀이과정

먼저 약수의 갯수가 필요하기떄문에 약수를 만드는 함수가 필요하다.

약수를 만드는 방법은 널리 알려져있다. 대표적인 방법이 약수가 대칭적이라는것을 이용해서 1부터 제곱근까지 for를 돌려서 한쪽을 출력하고, 그 수로 나눈 값인 반대쪽을 출력한다. 이렇게만 하면 제곱수는 제곱근이 두번 들어가기때문에 set으로 중복을 제거해준다. 이번엔 약수의 갯수가 필요하기때문에 len을 씌워서 리턴해준다.

자 그러면 이제 문제대로 푸는 일만 남는다.

1부터 number까지 약수 함수값을 구하고 만일 공격력이 limit를 초과하면 power를, 아니면 약수 함숫값을 더하는것으로 총 철의 무게를 파악할 수 있다.

정답

def measureCount(number):
    measure = []
    for i in range(1,int(number**(1/2))+1):
        if number%i == 0:
            measure.append(i)
            measure.append(number//i)
    return len(set(measure))

def solution(number, limit, power):
    answer = 0
    for i in range(1, number+1):
        measure = measureCount(i)
        if measure > limit:
            answer += power
        else:
            answer += measure
    return answer

가끔드는 생각이지만 math에 약수정돈 잇어도 되지않을까 생각한다 최대공약수와 최소공배수 말고도 있었으면 좋겟다.

 

'코딩테스트 > Programmers Level 1' 카테고리의 다른 글

13일차. 푸드 파이트 대회  (1) 2023.12.06
12일차. 과일 장수  (2) 2023.12.05
10일차. 명예의 전당 (1)  (0) 2023.12.03
9일차. 문자열 나누기  (0) 2023.12.02
8일차. 가장 가까운 같은 글자  (1) 2023.12.01