[Python] 알고리즘 연습 8 (프로그래머스)

Lake·2024년 5월 16일

Python 문제

목록 보기
8/22
post-thumbnail

문자열 다루기 기본 (연습문제)

  • 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성돼있는지 확인해주는 함수, solution을 완성하세요. 예를 들어 s가 "a234"이면 False를 리턴하고 "1234"라면 True를 리턴하면 됩니다.
    • 제한사항
      • s는 길이 1 이상, 길이 8 이하인 문자열입니다.
      • s는 영문 알파벳 대소문자 또는 0부터 9까지 숫자로 이루어져 있습니다.

제출한 코드 :

def solution(s):
    if (len(s) == 4) or (len(s) == 6):
        if s.isdigit():
            return True
    return False

행렬의 덧셈 (연습문제)

  • 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요.
    • 제한사항
      • 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다.

제출한 코드 :

def solution(arr1, arr2):
    answer = []
    for row1, row2 in zip(arr1, arr2):
        new_row = [x + y for x, y in zip(row1, row2)]
        answer.append(new_row)
    return answer

직사각형 별찍기 (연습 문제)

  • 이 문제에는 표준 입력으로 두 개의 정수 n과 m이 주어집니다.
    별(*) 문자를 이용해 가로의 길이가 n, 세로의 길이가 m인 직사각형 형태를 출력해보세요.
    • 제한사항
      • n과 m은 각각 1000 이하인 자연수입니다.

제출한 코드 :

a, b = map(int, input().strip().split(' '))

for _ in range(b):
    print('*' * a)

최대공약수와 최소공배수 (연습문제)

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

제출한 코드 :

# 최대공약수
def gcd(a, b):
    while b != 0:
        a, b = b, a % b
    return a
    
# 최소공배수
def lcm(a, b):
    return (a * b) // gcd(a, b)

def solution(n, m):
    return [gcd(n, m), lcm(n, m)]

3진법 뒤집기 (월간 코드 챌린지 시즌1)

  • 자연수 n이 매개변수로 주어집니다. n을 3진법 상에서 앞뒤로 뒤집은 후, 이를 다시 10진법으로 표현한 수를 return 하도록 solution 함수를 완성해주세요.
    • 제한사항
      • n은 1 이상 100,000,000 이하인 자연수입니다. -

3진법이란

생각해보니까 2진법이랑 10진법은 아는데 3진법은 처음 들어봐서 찾아봤다. 예상대로 0, 1, 2를 사용하여 수를 표현하는 방법이었다.
그건 그렇고 새로운 채팅에 안 물어보고 기존에 파이썬 관련 대화를 진행했던 챗에 물어보니까 "3진법이 뭐야?"라고 딱 6자로 물어봤는데 저렇게 쭉 답을 내놓아서 신기했다.

제출한 코드 :

def solution(n):
    # 3진법으로 변환
    ternary = ''
    
    while n > 0:
        ternary += str(n % 3)
        n //= 3
    
    # 뒤집기
    reversed_ternary = ternary[::-1]
    
    # 10진법으로 변환
    decimal = 0
    
    for i in range(len(reversed_ternary)):
        decimal += int(reversed_ternary[i]) * (3 ** i)
    return decimal

0개의 댓글