[Programmers] 가운데 글자 가져오기 / 3진법 뒤집기 / 같은 숫자는 싫어 / 나누어 떨어지는 숫자 배열 (python)

yourmean·2021년 1월 30일
0

Algorithm - Programmers

목록 보기
3/13
post-thumbnail

🌴 가운데 글자 가져오기

문제 링크

해결 전략

s : 길이가 1 이상, 100이하인 string

  1. 단어 길이가 짝수 : 가운데 두글자를 반환
  2. 단어 길이가 홀수 : 가운데 글자 반환

Initial Source Code

def solution(s):
    if len(s) % 2 != 0:  #홀
        return s[(len(s) // 2)]
    else:  #짝
        return s[len(s) // 2 - 1:len(s) // 2 + 1]

Final Source Code

def solution(s):
    answer = s[(len(s)//2)] if len(s)%2 !=0 else s[len(s)//2 - 1:len(s)//2+1]
    return answer


이걸 과연 풀이라고 할 수 있는가..?



🌴 3진법 뒤집기

문제 링크

해결 전략

n : 1 이상 100,000,000 이하인 자연수

  1. divmod(n,3)으로 3진법 변환하고, answer에 뒤집은 순서로 담음
  2. 3진법 > 10진법 변환 후 return

Source Code

def solution(n):
    answer = ''
    
    #3진법 변환 & 뒤집기
    while n>0:
        n, m = divmod(n,3)
        answer+= str(m)

    #10진법 변환
    answer= int(answer, 3)
    return answer


🌴 같은 숫자는 싫어

문제 링크

해결 전략

배열 arr의 크기 : 1이상 1,000,000 이하의 자연수
배열 arr의 원소의 크기 : 0이상 9이하의 정수

  1. arr의 첫 원소 answer에 추가
  2. 이후부터, (i-1)번째, i번째 원소가 불일치할 때 answer에 추가
  3. 최종 answer return

Initial Source Code

def solution(arr):
    answer = []

    for i in range(len(arr)):
        if i==0:
            answer.append(arr[i])
        elif arr[i-1]==arr[i]:
            pass
        else:
            answer.append(arr[i])

    return answer

if/elif/else가 거슬려서 코드 수정.
다음 두 경우에 대해,
1. i==0, 즉 len(answer) = 0
2. answer의 마지막 원소(가장 최근에 추가된 원소)와 다른 원소가 등장
answer에 추가

Final Source Code

def solution(arr):
    answer = []

    for a in arr:
        if len(answer)==0 or a!=answer[-1]:
            answer.append(a)

    return answer


🌴 나누어 떨어지는 숫자 배열

문제 링크

해결 전략

arr : 자연수를 담은 길이가 1 이상인 배열
divisor : 자연수

  1. arr의 원소 a가 divisor로 나눈 나머지가 0이면 answer에 append
  2. answer의 길이가 0이 아닌 경우 오름차순 정렬 후 return
  3. answer의 길이가 0이면 [-1] return

Source Code

def solution(arr, divisor):
    answer = []
    
    for a in arr:
        if a%divisor==0:
            answer.append(a)
    
    return sorted(answer) if len(answer)!=0 else [-1]

profile
𝐼 𝑒𝑖𝑡ℎ𝑒𝑟 𝑤𝑖𝑛 𝑜𝑟 𝑙𝑒𝑎𝑟𝑛 💪🏻

0개의 댓글