코딩공부/알고리즘

[파이썬 풀이] 백준 10809.알파벳 찾기

잉옐잉 2021. 11. 29. 02:14

문제   

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

 

입력   

첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.

 

출력   

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.

만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.

 

코드   

from string import ascii_lowercase

S = input()
check=[-1 for _ in range (26)]
alphabetList = list(ascii_lowercase)

for i in alphabetList:
    if i in S:
        check[alphabetList.index(i)]=S.index(i)

print(" ".join(map(str, check)))

 

코드 설명   

from string import ascii_lowercase

string함수에서 알파벳 소문자가 들어있는 친구들을 불러옵니다

 

S = input()
check=[-1 for _ in range (26)]
alphabetList = list(ascii_lowercase)

S를 입력받고, 각각의 알파벳들의 index값을 체크해줄 배열check를 만들어 줍니다.

그리고 알파벳 소문자들을 담아줄 배열alphabetList도 만들어 줍니다.

 

for i in alphabetList:
    if i in S:
        check[alphabetList.index(i)]=S.index(i)

반복문과 if문을 통해, 알파벳이 문장 S안에 있다면 배열check에 해당 알파벳의 index값을 기록합니다.

alphabetList의 i값의 인덱스 값을 이용해서, 해당 알파벳을 담당하는 배열check속 값을 S속 i의 처음 등장하는 위치(인덱스) 값으로 변경해줍니다.

 

print(" ".join(map(str, check)))

map함수를 이용하여 배열 check속 숫자들을 문자로 변환한 후 join함수를 이용하여 공백을 넣어 출력시켜줍니다.

 

관련 개념 정리   

input

파이썬에서는 값을 사용자로부터 입력받을때 input함수를 사용합니다.

입력받은 값을 넣을 변수 이름 = input("띄울 메세지")

 

단! input함수는 입력받은 모든 내용을 문자열로 인식합니다. 따라서 입력받은 내용을 정수로 변환하려면

d = int(input())

와 같은 형태로 작성하거나,  나중에 변수를 사용할때

print(int(d)+2)

와 같이 int()로 감싸서 작성할 수 있습니다.

 

 

list

list함수는 반복 가능한 자료형을 받아 리스트로 만들어 주는 함수입니다.

list(반복 가능한 자료형)

위와 같은 형태로 사용 가능합니다.

print(list("배고파"))
#['배', '고', '파']

print(list((1,6,3)))
#[1, 6, 3]

print(list([3,5,2]))
#[3, 5, 2]

문자열을 입력 받은 경우에는 한글자씩 쪼개서 리스트를 만듭니다.

숫자로 된 리스트를 만들기 위해서는 ,(쉼표) 로 구분해서 ()괄호 안에 입력하면 됩니다.

list에 list를 입력한 경우에는 아무런 변화 없이 입력한 list를 그대로 retrun합니다.

 

 

for문

특정 코드들을 원하는 횟수 만큼 반복 시킬 때 사용하는것이 for문입니다.

for문의 기본 구조는 아래와 같습니다.

for i in 리스트(or 문자열, 튜플):
	실행할 코드

리스트,문자열,튜플의 첫 글자나 요소부터 마지막 글자나 요소까지 차례대로 변수에 대입됩니다.

 

for문의 범위와 변수값을 숫자로 정하고 싶을때는 아래와 같이 range함수를 사용합니다.

for i in range(시작숫자,종료숫자,step):
	실행할 코드

step은 얼만큼씩 변수를 증가 시킬지 정하는 것 입니다.

시작숫자와 step은 생략되어도 됩니다.

 

i를 사용하지 않고 코드를 반복만 하고 싶은 경우, i자리를 _(언더바)로 대체해서 사용합니다.

 

 

if문

<조건> 하면, <코드>를 실행하고 싶을때 쓸 수 있는것이 바로 if문입니다.

기본적인 형태는 아래와 같습니다.

if 조건문 1:
	실행 코드 1 ...
elif 조건문 2:
	실행 코드 2 ...
else:
	실행 코드 3 ...

해석을 하자면, 조건문 1을 충족하면 실행 코드 1을 실행하고, 그게 아닌 조건문 2를 충족하면 실행 코드 2를 실행한다.

조건문 1과 조건문 2를 모두 충족하지 않으면 실행 코드 3을 실행한다. 입니다.

elif와 else는 필수는 아닙니다.

 

 

join

join함수는 문자열 사이에 사용자가 선택한 문자를 넣을 수있는 함수입니다.

배열의 각 요소를 합쳐서 문자열로 만들어주는 역할을 하기도 합니다.

print("1".join("룰루랄라"))
# 룰1루1랄1라

list=["졸","리","다"]
print(" ".join(list))
# 졸 리 다

위와 같은 형태로 사용 가능합니다.

 

 

map

map함수는 입력받은 자료형의 각 요소를 함수가 적용된 값으로 변형 시켜주는 함수입니다.

map(함수, 반복 가능한 자료형)

위와 같은 형태로 사용 가능합니다.

예시)

def dddd(x):
    return x+3

print(list(map(dddd,[2,5,1,8])))

# [5, 8, 4, 11]