우선 내가 푼 코드부터 올리자면 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
word = list(input())
alphabet = "abcdefghijklmnopqrstuvwxyz"
index = []
for i in range(len(list(alphabet))):
    index.append(-1)
 
pos = 0
#알파벳 위치 찾기
for i in word:  #baek
    cnt = 0
    for j in list(alphabet):
        if j == i and index[cnt] != -1:
            pos += 1
            pass
        elif j == i:
            index[cnt] = pos
            pos += 1
        cnt += 1
 
for i in range(len(list(alphabet))):
    print(index[i], end = ' ')
 
cs

내가 한 방식은 조금 무식하게 다 비교하는 방식이다.

1) 우선 리스트로 단어를 입력받는다.

2) index라는 리스트를 생성하고 a~z의 방을 생성하고 안에 -1로 초기화한다

3) pos라는 위치를 저장할 변수를 하나 생성하고 0으로 초기화한다.(position)

4) 이제 단어로 for문을 돌리는데, 이렇게 되면 입력받은 단어를 하나하나 뽑아서 다음 for문의 알파벳 26개와 비교를 하게 된다.

5) 비교를 통해서 만약 index가 -1(=초기값)이 아니고, 알파벳 변수에 있는 알파펫과 같은 알파벳이라면, pos(위치값)를 1 올리는 대신, pass를 시킨다. 이렇게 하는 이유는 중복되는 알파벳은 가장 처음에 나타난 위치를 업데이트시키지 않기 위해서이다.

6) 만약 처음 나타나는 알파벳이라면, 해당 알파벳의 index에 pos(위치값)을 넣어주고, 다음 pos를 위해서 pos +=1을 시킨다.

 

이런 식으로 일일이 비교하게끔 노가다 작업을 프로그램을 통해 하게 된다.


그런데 이걸 풀고 나서 다른사람들의 코드를 리뷰해보니 허탈한 심정이더라...

이유는 다음 코드를 보면 알게 될 것이다.

1
2
3
= input()
for x in range(97123):
    print(a.find(chr(x)), end=" ")
cs

이렇게 보면 알 수 잇듯이 단 3줄로 끝나버린다.

이유는 아스키코드 변환함수인 chr()와 문자열에서만 사용이 가능한 find() 함수를 사용하기 때문이다.

**chr( ) 함수는 숫자(아스키코드) -> 문자로 변환하는 함수

**ord( ) 함수는 문자 -> 숫자(아스키코드)로 변환하는 함수

**find( ) 함수는 괄호 안의 문자가 위치한 자리를 출력한다. (참고로, index( ) 함수도 괄호 안의 문자가 위치한 자리를 출력한다. 다만, find()에서는 찾는 문자가 없는 경우 -1을 출력하는 바면, index()는 찾는 문자가 없는 경우 ValueError를 발생시킨다.)


결론: 일일이 하는 것도 중요하다. 원리를 이해하게 되니까. 대신 함수를 알면 매우 간편하고 시간도 아낄 수 있다. 함수들을 잘 활용하도록 하자!

 

 

문제 출처: https://www.acmicpc.net/problem/10809

 

10809번: 알파벳 찾기

각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출

www.acmicpc.net

 

+ Recent posts