![[백준/BOJ] 10809번: 알파벳 찾기 (Python) 풀이, 딕셔너리 사용](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQ9mgx%2FbtsHPWolcpV%2FXaa5mHNXYyMBjmMdZnkrK0%2Fimg.png)
Baekjoon Online Judge (BOJ) 의 10809번 문제인 '알파벳 찾기' 를 풀어보았다. (딕셔너리 사용)
[문제 정보]
https://www.acmicpc.net/problem/10809
문제 개요:
알파벳 소문자로만 이루어진 단어 S가 주어진다. 각각의 알파벳에 대해서, 단어에 포함되어 있는 경우에는 처음 등장하는 위치를, 포함되어 있지 않은 경우에는 -1을 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 단어 S가 주어진다. 단어의 길이는 100을 넘지 않으며, 알파벳 소문자로만 이루어져 있다.
[ 출력 ]
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다.
만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출력한다. 단어의 첫 번째 글자는 0번째 위치이고, 두 번째 글자는 1번째 위치이다.
알파벳 '소문자' 로만 이루어진 단어 S의 각각 알파벳에 대해 처음 등장하는 위치를 출력하면 된다.예시) baekjoon 을 입력받았으면, b는 0번째 위치에 처음 등장, a는 1번째 위치에 처음 등장하는 알파벳인 것이다.
나는 입력받은 문자의 각각의 위치를 저장해야겠다는 생각 즉, key(key에는 각 알파벳)와 value(value에는 각 알파벳이 처음 등장하는 위치)를 저장해야겠다는 생각에 파이썬의 자료구조 기법 중 하나인 dictionary를 사용하였다.
하지만 풀고 나서 다른 사람들의 풀이를 보니 딕셔너리를 사용한 분들은 거의 없었다... 하긴 단계부터 '문자열' 단계인데 내가 잘못 생각했던 것 같기도 하다. 그래도 알고리즘에 문제는 없어서 리뷰를 작성해보기로 했다.
알고리즘:
- S(단어)를 입력받고, 단어의 각 알파벳의 처음 등장한 위치를 저장하기 위하여 빈 딕셔너리를 loc(location) 함수에 초기화시킨다.
- 입력받은 단어의 길이만큼 반복하는 반복문을 만들어주고, 딕셔너리에 단어별로 위치를(순서대로 0번째부터 i번째까지) 저장해준다. (* 단어 중 중복된 알파벳은 어차피 처음 등장한 위치가 필요한 것이기에 의미가 없으므로 딕셔너리에 해당 알파벳이 이미 있으면 건너뛰는 코드를 작성해준다.)
- 알파벳 개수인 26번 반복하는 반복문을 만들어준다.
- 파이썬의 딕셔너리는 없는 key에 접근하려고 하면 KeyError가 발생하므로, 예외 처리를 위한 try except 구문을 사용하여 평소에는 알파벳 별로 loc의 키 값과 일치하는 알파벳의 위치를 출력해주고, 예외가 발생할 경우(입력받은 단어 중 없는 알파벳 차례일 경우)에는 입력받은 단어에는 포함되어 있지 않은 알파벳이므로 -1을 출력한다.
코드:
S = input()
loc = {}
for i in range(0, len(S)):
if S[i] in loc: continue
loc[S[i]] = i
for i in range(0, 26):
try:
print(loc[chr(97+i)], end=' ')
except:
print(-1, end=' ')
위 풀이에 대한 질문이나 틀린 정보가 있다면 댓글로 말씀해 주시면 감사하겠습니다!
'Dev > PS' 카테고리의 다른 글
[백준/BOJ] 1152번: 단어의 개수 (Python) 풀이 (0) | 2024.06.11 |
---|---|
[백준/BOJ] 2675번: 문자열 반복 (Python) 풀이 (2) | 2024.06.11 |
[백준/BOJ] 11720번: 숫자의 합 (Python) 풀이 (0) | 2024.06.06 |
[백준/BOJ] 11654번: 아스키 코드 (Python) 풀이 (2) | 2024.06.06 |
[백준/BOJ] 9086번: 문자열 (Python) 풀이 (0) | 2024.06.05 |
실력있는 개발자가 되고싶은 22학번 대학생입니다. (현재는 군복무 중)
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!