오늘의 코딩공부_3.23(목)

나은·2023년 3월 23일

오늘의 코딩공부

목록 보기
16/23

프로그래머스-두 개 뽑아서 더하기

문제상황

업로드중..


1차 코드

def solution(numbers):
    answer = []
    k=0
    n=len(numbers)
    for i in range(n):
        for j in range(1,n):
            k=numbers[i]+numbers[j]
            answer.append(k)
    answer=set(answer)
    answer=list(set(answer))
    return answer
numbers =[2,1,3,4,1] 으로 했는데 결과가 잘 못 나옴

아마 중복 된 걸로 예상

i와 j가 중복된 숫자가 들어가지 않게 수정


2차 코드

def solution(numbers):
    answer = []
    k=0
    n=len(numbers)
    for i in range(n):
        for j in range(i+1,n):
            k=numbers[i]+numbers[j]
            answer.append(k)
    answer=set(answer)
    answer=list(set(answer))
    return answer

정확성 테스트에서 실패

why?
모르겠어서 chat gpt한테 물어봄


chatgpt 답안

def solution(numbers):
   answer = []
   k=0
   n=len(numbers)
   for i in range(n):
       for j in range(i+1,n):
           k=numbers[i]+numbers[j]
           answer.append(k)
   answer=set(answer)
   return list(answer)

정확성 테스트에서 5개중에 2개가 오류남

마지막에 중복 제거하는거에서 오류가 난걸까라는 생각이 듦


3차 코드

def solution(numbers):
   answer = []
   k=0
   n=len(numbers)
   for i in range(n):
       for j in range(i+1,n):
           k=numbers[i]+numbers[j]
           answer.append(k)
   answer=set(answer)
   answer=list(answer)
   answer.sort()
   return answer

틀렸던 이유

마지막에 오름차순으로 정렬을 안해서....
문제를 꼼꼼하게 읽자..ㅋㅋㅋ


프로그래머스 -최소공배수 최대공약수

문제상황

"""
두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환하는 함수,
solution을 완성해 보세요.
배열의 맨 앞에 최대공약수, 그다음 최소공배수를 넣어 반환하면 됩니다.
예를 들어 두 수 3, 12의 최대공약수는 3, 최소공배수는 12이므로
solution(3, 12)는 [3, 12]를 반환해야 합니다.
제한 사항
두 수는 1이상 1000000이하의 자연수입니다.
"""


알고리즘

  1. 최대공약수를 먼저 구하고 이를 이용해서 최소 공배수를 구하자
  2. n,m중에서 더 큰수를 n에 두고 계산한다.
  3. 최대 공약수는 m보다 작은 수 중에서 n과 m으로 나누었을때 나머지가 둘다 0이 나오는 수여야한다. 이를 이용해 for 문을 이용해서 대입한다.
  4. 최대 공약수를 구하면 n,m을 최대 공약수로 나눈 몫을 구하고 모두 곱하면 최소 공배수를 구할 수 있다.

코드1회차

def solution(n, m):
    common_divisor=0
    common_multiple=0
    answer=[]
    if m > n:
        n,m = m,n
    for i in range(m-1):
        if (n%i==0) and (m%i==0):
            common_divisor=i
    common_multiple=(n//common_divisor)*(m//common_divisor)
    answer=[common_divisor,common_multiple]
    return answer

오류 내용

i에 0부터 들어가니까 오류가 생김

profile
코딩공부블로그

0개의 댓글