7/31 과제 제출 - AI 서비스 완성! AI 웹개발 취업캠프 [NIPA/정보통신산업진흥원]

Alicia·2023년 7월 31일
0

AI_Web_nipa

목록 보기
7/31

1) 숫자끼리 비교하는 연산과 문자끼리 비교하는 연산 중 왜 문자끼리 비교하는 연산이 상대적으로 불리한지 이유에 대해서 정리해보고 샘플 코드를 구현.
샘플코드 작성시 비교 연산자 뿐만 아니라 문자열이 실제 어떤 과정을 거쳐서 비교가 가능한지 확인 가능한 형태로 코드를 작성할 것

숫자끼리 비교하는 연산은 단순히 값의 크기를 비교하는 연산으로서 매우 빠르고 간단합니다. 숫자는 메모리에 바로 표현되기 때문에 직접적으로 비교하는데에 큰 비용이 들지 않습니다. 반면 문자열은 숫자와 달리 여러 개의 문자로 이루어져 있으며, 각 문자마다 비교를 해야하기 때문에 연산이 상대적으로 복잡합니다.

문자끼리 비교하는 연산은 문자의 유니코드(Unicode) 값으로 비교가 이루어집니다. 각 문자는 컴퓨터 내부에서 유니코드로 표현되며, 이러한 유니코드 값은 문자의 순서를 나타냅니다. 따라서 문자끼리의 비교는 해당 문자의 **유니코드 값**을 비교하는 과정이 필요합니다. 이러한 문자의 유니코드 값을 비교하는 과정은 숫자 비교보다 더 복잡하며, 문자열의 길이가 길어질수록 비교에 소요되는 시간이 늘어납니다.

특히, 문자열의 길이가 길어질수록 비교하는데에 비례하여 시간 복잡도가 증가하게 됩니다.

따라서, 문자열끼리의 비교는 숫자끼리의 비교보다 성능면에서 더 느릴 수 있습니다. 하지만 일반적인 상황에서는 이러한 성능 차이가 크게 영향을 미치지 않으며, 파이썬은 문자열 비교를 효율적으로 처리하는 최적화된 방법을 제공하므로 큰 문제는 발생하지 않습니다.

import time

def string_comparison(str1, str2):
    # 문자열 str1과 str2를 비교하는 함수
    start_time = time.time()  # 시작 시간 기록

    if str1 == str2:
        result = "두 문자열은 동일합니다."
    else:
        result = "두 문자열은 다릅니다."

    end_time = time.time()  # 종료 시간 기록
    elapsed_time = end_time - start_time  # 실행 시간 계산
    print(f"문자열 비교 결과: {result}")
    print(f"문자열 비교 실행 시간: {elapsed_time}초")

def number_comparison(num1, num2):
    # 숫자 num1과 num2를 비교하는 함수
    start_time = time.time()  # 시작 시간 기록

    if num1 == num2:
        result = "두 숫자는 동일합니다."
    elif num1 < num2:
        result = "첫 번째 숫자가 두 번째 숫자보다 작습니다."
    else:
        result = "첫 번째 숫자가 두 번째 숫자보다 큽니다."

    end_time = time.time()  # 종료 시간 기록
    elapsed_time = end_time - start_time  # 실행 시간 계산
    print(f"숫자 비교 결과: {result}")
    print(f"숫자 비교 실행 시간: {elapsed_time}초")

# 두 문자열 비교하기
string1 = "hello"
string2 = "world"
string_comparison(string1, string2)

if string1 > string2:
    print("string1이 string2보다 큽니다.")
else:
    print("string2이 string1보다 큽니다.")

string3 = "hello"
string4 = "hello"
string_comparison(string3, string4)

# 두 숫자 비교하기
number1 = 10
number2 = 5
number_comparison(number1, number2)

number3 = 7
number4 = 7
number_comparison(number3, number4)

혹여 시간복잡도를 출력하는 코드를 사용하여 테스트 해보았는데 다 0으로 나와서 큐큐큨ㅋ..너무 간단해서 그런가봅니다...

  • 문자열의 비교는 유니코드 코드 포인트 값을 비교하는 방식으로 이루어집니다. 각 문자의 코드 포인트 값은 파이썬 내장 함수 ord()를 사용하여 확인할 수 있습니다. 이 함수는 문자의 유니코드 코드 포인트 값을 반환합니다.
def compare_strings(str1, str2):
    # 두 문자열의 길이를 비교하여 짧은 길이를 기준으로 루프를 돕니다.
    min_length = min(len(str1), len(str2))
    
    for i in range(min_length):
        # 두 문자열의 각 문자를 유니코드 코드 포인트 값으로 변환합니다.
        char1 = ord(str1[i])
        char2 = ord(str2[i])
        
        # 유니코드 코드 포인트 값을 비교합니다.
        if char1 < char2:
            return f"{str1}가 {str2}보다 앞에 있습니다."
        elif char1 > char2:
            return f"{str2}가 {str1}보다 앞에 있습니다."
    
    # 루프를 모두 돌았을 때, 짧은 길이의 문자열이 더 작을 수도 있으므로 길이를 비교하여 결과를 반환합니다.
    if len(str1) < len(str2):
        return f"{str1}가 {str2}보다 앞에 있습니다."
    elif len(str1) > len(str2):
        return f"{str2}가 {str1}보다 앞에 있습니다."
    else:
        return "두 문자열은 동일합니다."

# 샘플 문자열 비교
str1 = "apple"
str2 = "banana"
result = compare_strings(str1, str2)
print(result)  # 출력: "apple가 banana보다 앞에 있습니다."

2) 파이썬으로 일부 중복되는 element를 저장하고 최소 element가 10개이상 되는 배열을 만든다. 그리고 set() 구문 없이 오로지 for in 문으로 배열의 중복된 값을 없애는 코드를 작성하기

# 일부 중복되는 요소를 저장하는 배열
arr = [1, 2, 3, 2, 4, 5, 6, 5, 7, 8, 9, 10, 1]

# 중복된 값을 제거할 배열
unique_arr = []

# 배열의 요소를 하나씩 확인하면서 중복 여부를 확인
for num in arr:
    if num not in unique_arr:
        unique_arr.append(num)

# 중복이 제거된 배열 출력
print(unique_arr)

*본 후기는 정보통신산업진흥원(NIPA)에서 주관하는 과제 기록으로 작성 되었습니다.

0개의 댓글