Study

[묘공단]파이썬 스터디 11주차

A란 2024. 2. 16. 21:27

시뮬레이션

주어진 상황을 잘 이해하고 이를 코드로 구현하는 과정

  • 하나의 문제를 최대한 여러개로 분리하기
  • 예외 처리가 필요하다면 독립 함수로 구현

 

문제풀이

  • 배열 회전하기
def rotation(arr):
    # 행과 열의 크기 구하기
    rows = len(arr)
    cols = len(arr[0])
    
    # 새로운 2차원 배열 초기화
    rotated_arr = [[0] * rows for _ in range(cols)]
    
    # 시계 방향으로 90도 회전
    for i in range(rows):
        for j in range(cols):
            rotated_arr[j][rows - 1 - i] = arr[i][j]
    
    return rotated_arr

def solution(arr, n):
    # n번 회전
    for _ in range(n):
        arr = rotation(arr)
    
    return arr
  • 두 행렬을 곱한 전치 행렬 만들기
def solution(matrix1, matrix2):
    # 결과 행렬 초기화
    result_matrix = [[0] * 3 for _ in range(3)]
    
    # 행렬 곱셈 수행
    for i in range(3):
        for j in range(3):
            for k in range(3):
                result_matrix[i][j] += matrix1[i][k] * matrix2[k][j]
    
    # 결과 행렬의 전치행렬 계산
    result = [[result_matrix[j][i] for j in range(3)] for i in range(3)]
    
    return result
  • 이진 변환

주어진 이진 문자열 s를 "1"이 될 때까지 반복적으로 이진 변환을 적용하고, 각 단계에서 제거된 0의 개수와 변환 횟수를 계산하는 것

예시)

회차 이진변화이전 제거할 0의 개수 0 제거 후 길이 이진 변환 결과
1 "110010101001" 6 6 "110"
2 "110" 1 2 "10"
3 "10" 1 1 "1"

 

def solution(s):
    # 초기화
    transform = 0
    zero = 0
    
   # 1이 될때까지 반복
    while s != "1":
        # 제거할 0의 개수 계산
        zero += s.count("0")
        # 0을 제거한 후의 길이를 2진법으로 표현한 문자열로 변환
        s = bin(s.count("1"))[2:]
        transform += 1

    return [transform, zero]
더보기
bin() 함수는 정수를 이진법으로 변환해주는 파이썬의 내장함수 

ex) bin(10) -> ob1010
**"ob"는 이진수를 나타내는 접두사