>

TIL

3주차 Day 4. 아스키코드, ord()함수, 파이썬 String모듈

ekdud 2024. 7. 11. 11:26

🤍

    알고리즘 문제풀기

    *백준 알고리즘 문제(python3 말고 pypy 선택 - pypy가 더 빠르다)

     

    문제 10809

    알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.

     

    // 내 풀이

    S = str(input()) 
    list = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
    answer = []
    
    for i in list:
        if i in S:
            answer.append(str(S.index(i)))
        else:
            answer.append('-1') 
        
    print(' '.join(answer))

     

    // 강의 풀이

    첫번째 방법: string 모듈을 import해서 string.ascii_lowercase를 사용함. 시간복잡도 O(n^2)

    import string
    
    word = str(input())
    
    def get_idx_naive(word):
        result = [-1]*len(string.ascii_lowercase)
        for i in range(len(word)):
            char = word[i]
            for j in range(len(string.ascii_lowercase)):
                lo = string.ascii_lowercase[j]
                if result[j] == -1 and char == lo:
                    result[j] = i
        print(' '.join([str(num) for num in result]))
    
    get_idx_naive(word)

     

    두번째 방법: 아스키코드 사용! 시간 복잡도 O(n)

    import string
    
    word = str(input())
    
    def get_idx(word):
        result = [-1]*len(string.ascii_lowercase)
        for i in range(len(word)):
            idx = ord(word[i]) - 97
            if result[idx] == -1:
                result[idx] = i
        print(' '.join([str(num) for num in result]))
    
    get_idx(word)

     

    - ord(알파벳): 인자로 들어간 알파벳의 unicode 정수를 반환하는 함수. 

      ex. ord('a')  >>> 97  

    *유니코드는 ASCII 문자 집합을 처음 128개 기호로 포함하므로, ASCII 문자는 유니코드와 ASCII에서 같은 숫자형 코드를 가진다.

     

     

     ***참고***

     파이썬 string모듈

    1. string.ascii_letters : 영어 알파벳 소,대문자 모두 출력

    2. string.ascii_lowercase : 영어 소문자 출력

    3. string.ascii_uppercase : 영어 대문자 출력

    4. string.digits : 십진수 0~9 출력

    5. string.hexdigits : 16진수 0~F 출력

    6. string.puctuation : 특수문자 출력

     


     

    ALGORITHM CODE KATA

    Ⅰ. 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요. (school.programmers.co.kr)

    def solution(numbers):
        answer = 0
        for i in range(10):
            if i not in numbers:
                answer += i
        return answer
    
    # 다른 분 풀이 보니까 총합 45에서 numbers요소들의 합을 빼는 방식으로 푸셨더라.. 너무 좋은 아이디어!!!

     

    Ⅱ.  정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. (school.programmers.co.kr)

    def solution(arr):
        if len(arr) > 1:
            min_num = min(arr)
            arr.remove(min_num)
        elif len(arr) <= 1:
            arr = [-1]
        
        return arr