Today I Learned

(5) 프로그래머스 코딩테스트 Lv1 - 파이썬

by Holly Yoon

17. 제일 작은 수 제거하기(문제 링크)

  • 문제 설명 : 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다.
  • 제한 조건 : arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다.
#첨에 이렇게 풀었는데 틀림
def solution(arr):
    arr.sort(reverse=True)
    answer = arr[:-1]
    return answer if len(answer)!=0 else [-1]
  • min값을 찾으려고 list의 순서를 바꿔서 뺏더니, 인덱스 조건과 맞지 않아 틀렸다.
def solution(arr):
    answer = []
    for i in arr: 
        if i != min(arr):
            answer.append(i)
    return answer if len(answer) != 0 else [-1]
  • min(list)해줘서 최소값을 찾고, 새로운 list에 비교 후 넣어주는 형태로 풀었다. 근데 이 코드는 테스트케이스1을 통과를 못한다. 실행속도가 오래 걸려서..
#나레기의 풀이
def solution(arr):
    if len(arr)==1:
        return [-1]
    min_val = min(arr)
    return [x for x in arr if x != min_val]
  • 조건 필터링을 element가 1개인 것으로 먼저해주는게 빠르다.
#남의 풀이
def rm_small(mylist):
    return [i for i in mylist if i > min(mylist)]
  • 부등호를 사용해서 출력해주는 방법도 있다. 아마 이건 업데이트 전 풀이인듯. 최소값을 제거해서 없을 경우, -1 출력이 없어서..

18. 음양 더하기(문제 링크)

  • 문제 설명 : 어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.
#나의 풀이
def solution(absolutes, signs):
    for i, sign in enumerate(signs):
        if sign == True:
            absolutes[i] = absolutes[i]
        else:
            absolutes[i] = (-1) * absolutes[i]
    answer = sum(absolutes)
    return answer
    
#타인의 풀이
def solution(absolutes, signs):
    answer=0
    for absolute,sign in zip(absolutes,signs):
        if sign:
            answer+=absolute
        else:
            answer-=absolute
    return answer
  • enumerate()를 사용하여 absolutes의 숫자를 변경해주고, 해당 리스트 요소의 합을 구하는 식을 만들었다.
  • zip()을 사용하면 조건식이 더 간결해진다. sum이 아니라 조건식에 할당연산자를 사용해버리면 되는 것이었다..

19. 없는 숫자 더하기(문제 링크)

  • 문제 설명 : 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
#나으 풀이
def solution(numbers):
    sum=0
    for i in range(10):
        if i not in numbers:
            sum += i
    return sum
#넘의 풀이
solution = lambda x: sum(range(10)) - sum(x)
  • 요소를 체크하는게 아니라, 구냥 주어진 sum()을 빼버리는 방법을 생각 못했다.

20.가운데 글자 가져오기(문제 링크)

  • 문제 설명 : 단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.
  • 제한사항 : s는 길이가 1 이상, 100이하인 스트링입니다.
 
#나의 풀이
def solution(s):
    mid = len(s)//2
    if (len(s)%2) == 0 :
        answer = s[mid-1:mid+1]
    else:
        answer = s[mid]        
    return answer
#우와한 남의 풀이
def string_middle(str):
    return str[(len(str)-1)//2:len(str)//2+1]
  • // 연산자를 활용해서 짝, 홀수를 if문 처리하지 않아도 되게 풀 수 있다.

21.수박수박수? (문제 링크)

  • 문제 설명 : 길이가 n이고, "수박수박수박수...."와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요. 예를들어 n이 4이면 "수박수박"을 리턴하고 3이라면 "수박수"를 리턴하면 됩니다. 제한 조건 n은 길이 10,000이하인 자연수입니다.
#내 풀이는 매우 돌아가서 갔다
def solution(n):
    answer = []
    for i in range(n):
        if i%2==1:
            answer.append('박')
        else:
            answer.append('수')
    return ''.join(answer)

#간단한 남의 풀이
def water_melon(n):
    s = "수박" * n
    return s[:n]

#간단한 남의 풀이2
def water_melon(n):
    return "수박"*(n//2) + "수"*(n%2)
  • 수박수박수박..을 길게 만들어놓고 slicing을 해도 된다.
  • 짝수용 '수박'을 만들고, 나머지 연산을 활용하여 붙일지 여부를 결정할 수도 있다.

블로그의 정보

Study Log by Holly

Holly Yoon

활동하기