🤍
알고리즘 문제풀기
*백준 알고리즘 문제(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