반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제

배열로 받은 숫자 중 3가지를 더하거나 뺴서 숫자 0을 만들수 있는 방법을 총합해서 reuturn하면 됩니다.

 

코드

1. 제가 푼 for문 여러번 충첩하는 것보다 다른 분의 코드가 훨씬 복잡하지 않고 간결해서 가져왔습니다.

from itertools import combinations

def solution(number):    
    cnt = 0
    for i in combinations(number,3) :
        if sum(i) == 0 :
            cnt += 1
    return cnt

* combinations(list,number)

위와 같이 함수를 사용하면 list 내의 원소 중 number개를 뽑아 조합을 만들어서 return 해줍니다.

예를 들어 list = [1, 2, 3], number = 2인 경우 (1, 2), (1, 3), (2, 3)이 반환됩니다.

반응형
반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

 

문제

최대공약수와 최소공배수를 구해서 reutnr 하면 됩니다.

 

코드

1. math import 해서 풀어봤습니다.

import math

def solution(n, m):
    answer = [math.gcd(n, m), (n * m) // math.gcd(n, m)]
    return answer

- math.gcd()는 최대 공약수를 구해줍니다.

- math 사용하지 않고 푸는 방법도 있습니다.

def solution(n, m):
    # 최대공약수
    for i in range(min(n,m),0,-1): 
        if n%i ==0 and m%i==0:
            answer.append(i)
            break

    # 최소공배수
    for i in range(max(n,m),n*m+1)
        if i%n == 0 and i%m == 0:
            answer.append(i)
            break
            
    return answer
반응형
반응형
반응형

문제

파라미터 n이라는 자연수를 받으면 그 숫자만큼 '수'와 '박'을 번갈아 가면서 적은 문자열을 return하면 됩니다.

 

코드

1. for 과 if

def solution(n):
    answer = ''
    for i in range(n):
        if i%2 == 0:
            answer = answer + '수'
        else:
            answer = answer + '박'
    
    return answer

 

2. 정말 완벽하게 문제를  이해하고 푼 코드입니다.

def water_melon(n):
    str = "수박"*n
    return str[:n]

 

반응형
반응형
반응형

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

 

프로그래머스

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

programmers.co.kr

문제

멤버쉽을 통해서 구매할려는 품목을 할인 받을 수 있는 날짜를 구해서 return 해야하는 문제입니다.

 

코드

1. 테스트는 통과했지만 테스트 12 말고는 실패했습니다.

def solution(want, number, discount):
    answer = 0
    arr = [number[idx] * [i] for idx, i in enumerate(want)]
    arr = sum(arr, [])
    
    for i in range(len(discount) - len(arr)):
        idx = i
        try:
            tmp = discount[i: i + len(arr)]
            for j in range(len(arr)):
                if arr[j] not in tmp:
                    break
                else:
                    tmp.remove(arr[j])
            if not tmp:
                answer = i + 1
                break
        except:
            pass
        
    return answer

 

2. Counter 함수 사용.(다른분 코드)

from collections import Counter

def solution(want, number, discount):
    answer = 0
    dic = {}
    
    for i in range(len(want)):
        dic[want[i]] = number[i]
    
    for i in range(len(discount) -9):
        if dic == Counter(discount[i:i+10]):
            answer += 1
    
    return answer

반응형
반응형

문제

연속 부분 수열의 합을 개산하는 문제입니다.

 

* 파라미터 값이 배열의 값으로 들어오기 때문에 index 0가 마지막 부분 연결하는 부분을 신경써야 합니다.

 

자세한 내용!

 

코드

- 수열의 합을 배열에 넣는 방식을 사용했습니다.

- set()으로 중복된 값을 제거 하는 방법을 사용했습니다. 

중복된 값을 제거할 때 기존 리스트의 순서를 유지하고 제거하는 방법과 유지하지 않고 제거하는 방법 중 어떤것이 속도가 빠른지 확인했습니다.

set()과 이중 for()문 사용시 time = 1.0013580322265625e-05 걸렸습니다.

 

 

1. 이중 for

from collections import deque
def solution(elements):
    answer = 0
    elements = deque(elements)

    list = []
    for i in range(len(elements)):
        tmp = 0
        for j in range(len(elements)):
            tmp += elements[j]
            list.append(tmp)
        elements.rotate(-1)
    
    return len(set(list))

반응형

+ Recent posts