Algorithm/programmers/level1/210612/5문제 (with python)

2021년 6월 12일

프로그래머스에서 푼 level1 5문제 모음집입니다.
문제 풀이에 대한 설명은 코드에 주석으로 표시하였습니다.

📖문제1 : 두개 뽑아서 더하기

⌨ 코드1 (import combinations)

from itertools import combinations

def solution(numbers):
    answer = []
    # numbers에서 2개를 뽑는 모든 경우
    for i, j in combinations(numbers, 2):
        add = i + j
        if add not in answer:
            answer.append(add)
    answer.sort()
    return answer

⌨ 코드2

def solution(numbers):
    answer = []
    for i in range(len(numbers)-1):
        for j in range(i+1, len(numbers)):
            add = numbers[i] + numbers[j]
            if add not in answer:
                answer.append(add)
            
    answer.sort()
    return answer

📖문제2 : 2016년

⌨ 코드

def solution(a, b):
    after = 0
    # 각 달에 있는 날짜수를 담은 리스트
    days = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    day = ['THU', 'FRI', 'SAT', 'SUN', 'MON', 'TUE', 'WED']
    # x월이라면 x-1월까지의 날짜수를 더해준다.
    for i in range(a-1):
        after += days[i]
    # y일을 더해준다.
    after += b
    # 요일을 구한다.
    answer = day[after%7]
    return answer

📖문제3 : 비밀 지도

⌨ 코드

def solution(n, arr1, arr2):
    answer = []
    
    for one, two in zip(arr1, arr2):
        num = one | two
        # bin()은 맨 앞에 '0b'를 포함하는 문자열을 반환하므로 잘라내기
        num = bin(num)[2:]
        
        # 문자열 5글자 채우기
        while len(num) < n:
            num = '0' + num
            
        tmp = ''
        for a in num:
            if a == '1':
                tmp += '#'
            else:
                tmp += ' '
        answer.append(tmp)
    return answer

📖문제4 : 가운데 글자 가져오기

⌨ 코드

ef solution(s):
    answer = ''
    mid = len(s) // 2
    # 글자수가 짝수이면
    if len(s) % 2 == 0:
        # 가운데 두 글자
        answer += s[mid-1] + s[mid]
    # 글자수가 홀수이면
    else:
        # 가운데 한 글자
        answer += s[mid]
    return answer

⌨ 코드 -> 다른 분의 코드

  • len(s)가 홀수이면 (len(s)-1)//2 == len(s)//2인 특성을 이용하셨다.
def string_middle(str):
    return str[(len(str)-1)//2:len(str)//2+1]

📖문제5 : 같은 숫자는 싫어

⌨ 코드

def solution(arr):
    # 첫 문자는 미리 담아둔다
    answer = [arr[0]]

    for i in range(1,len(arr)):
        # 이전 문자와 현재 문자와 같지 않을 때만 정답 리스트에 문자를 담는다.
        if arr[i]!=arr[i-1]:
            answer.append(arr[i])

    return answer

⌨ 코드 -> 다른 분의 코드

  • 내 코드는 arr에서 현재 문자와 이전 문자를 비교했는데
    이 분들은 현재 문자는 arr에서, 이전 문자는 정답리스트의 끝(answer[-1])과 비교하는 방식으로 문제를 푸셨다.
def no_continuous(s):
    result = []
    for c in s:
        if (len(result) == 0) or (result[-1] != c):
            result.append(c)
    return result

좋은 웹페이지 즐겨찾기