파이썬 배열 역순 정렬, 기수 변환하기

2022. 2. 5. 20:52컴퓨터 사이언스/Algorithm

반응형

배열을 사용하는 기본 알고리즘들

 

배열 역순으로 정렬하기 

from typing import Any, MutableSequence

# a의 원소를 역순으로 정렬
def reverse_array(a: MutableSequence) -> None:
    n = len(a)
    for i in range(n//2):
        a[i], a[n-i-1] = a[n-i-1], a[i]


if __name__ == '__main__':
    print('배열 원소를 역순으로 정렬합니다.')
    nx = int(input('원수의 수를 입력하세요! : '))
    x = [None] * nx

    for i in range(nx):
        x[i] = int(input(f'x[{i}]값을 입력해주세요. : '))

    reverse_array(x)

    print('역순의 결과입니다!')
    for i in range(nx):
        print(f'x[{i}] = {x[i]}')

 

Devide & Conquer

def reverse_array(a: MutableSequence) -> None:

파이썬에는 변경가능한 객체(mutable) 과 변경불가능한 객체(immutable) 이 있습니다.

변경가능한 객체에는 리스트(list)와 딕셔너리(dict) 이 있습니다.

변경불가능한 객체에는 일반적인 자료형 int, string 등 과 튜플(tuple) 등이 있습니다.

https://dpdpwl.tistory.com/82

 

    n = len(a)
    for i in range(n//2):
        a[i], a[n-i-1] = a[n-i-1], a[i]

배열의 첫번째 원소와 마지막 원소, 두번째 원소와 마지막에서 두번째 원소의 위치들을 서로 바꾸어줌으로서 역순으로 정렬한다.

또한 원소의 갯수가 홀수이라면 가운데 원소는 바꿔줄 필요가 없기에, n//2 만큼 반복문을 실행한다.

 

 


 

기수 변환하기(n진수 구하기)

from typing import Any, MutableSequence

# 10진수 정숫값을 입력받아서 2~36 진수로 변환하여 출력하기
def card_conv(x: int, r: int) -> str:
    # 정숫값 x를 r진수로 변환한 뒤 그 수를 나타내는 문자열을 반환

    d = '' # 변환 후의 문자열
    dchar = '0123456789ABCDEFGHIJKLNMOPQRSTUVWXYZ'

    while x > 0:
        d += dchar[x % r] # 해당하는 문자를 꺼내 추가
        x = x // r

    return d[::-1] # 역순으로 반환
     


if __name__ == '__main__':
    print('10진수를 n진수로 변환합니다.')
    
    while True:
        while True:
            no = int(input('변환할 값으로 음이 아닌 정수를 입력하세요 : '))
            if no > 0:
                break

        while True:
            cd = int(input('어떤 진수로 변환할까요?: '))
            if 2 <= cd <= 36:
                break

        print(f'{no}을 {cd}진수로 변환한 값은 {card_conv(no, cd)}입니다!')

        retry = input('exit 을 입력하시면 프로그램이 종료됩니다.')
        if retry == 'exit':
            break

 

Devide & Conquer

    while x > 0:
        d += dchar[x % r] # 해당하는 문자를 꺼내 추가
        x = x // r

진수로 변환할 때는 해당 진수로 나누어주기 때문에 위와 같은 코드 사용

 

    return d[::-1] # 역순으로 반환

변환 후 아래에서부터 세기 때문에 위와 같은 코드 사용

 

        while True:
            cd = int(input('어떤 진수로 변환할까요?: '))
            if 2 <= cd <= 36:
                break

2진수부터 36진수까지만 유효하기에 위와 같은 코드 사용

 

 

반응형