Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- nestjs
- dfs
- typeORM
- JavaScript
- Sequelize
- Bull
- TypeScript
- MySQL
- jest
- class
- MongoDB
- flask
- OCR
- Dinosaur
- 게임
- AWS
- 공룡게임
- 정렬
- 자료구조
- mongoose
- GIT
- cookie
- nodejs
- Queue
- Python
- Express
- game
- Nest.js
- react
Archives
- Today
- Total
포시코딩
[백준][구현] 10809 - 알파벳 찾기 본문
728x90
문제
https://www.acmicpc.net/problem/10809
10809번: 알파벳 찾기
각각의 알파벳에 대해서, a가 처음 등장하는 위치, b가 처음 등장하는 위치, ... z가 처음 등장하는 위치를 공백으로 구분해서 출력한다. 만약, 어떤 알파벳이 단어에 포함되어 있지 않다면 -1을 출
www.acmicpc.net
시간 제한과 메모리 제한도 넉넉하기 때문에
파이썬에서 문자열을 아스키 코드로 변환하는 함수를 알면 쉽게 풀 수 있는 문제다.
난이도도 solved.ac 기준 브론즈 2로 낮은 편에 속한다.
내 풀이
S = input()
for x in range(ord('a'), ord('z')+1):
print(S.find(chr(x)), end=' ')
알파벳의 아스키 코드 변환 함수인 ord를 통해 a~z 까지의 값을 구하고
list의 find 함수를 사용하여
해당 문자가 문자열의 몇 번째에 위치했는지, 없다면 -1를 리턴하게끔 만들었다.
이렇듯 간단히 풀긴 했지만 함수의 도움을 많이 받았기에
아래 코드처럼 다른 방법으로 푼 풀이도 흥미로워 포스팅하게 되었다.
다른 풀이
S = input()
arr = [-1] * 26 # a부터 z까지의 알파벳은 26개
for i in range(len(S)):
index = ord(S[i]) - ord('a')
if arr[index] == -1:
arr[index] = i
for x in arr:
print(x, end=' ')
마찬가지로 파이썬의 함수를 썼지만 ord만을 사용했다.
출력 결과를 a부터 z까지의 알파벳들의 처음 등장 위치를 구하는 것이므로
a~z의 등장 위치를 -1로 초기화한 리스트를 준비한다.
그 후, ord를 통해 a~z가 0~25의 index 값을 가지게 해서 만약 arr의 해당 위치가 -1이면
즉, 처음 등장했다면 등장 위치로 바꿔준다.
이렇게 a ~ z 문자들에 대해 문자열 S에서의 등장 위치를 구할 수 있다.
728x90
'자료구조알고리즘 > 문제풀이' 카테고리의 다른 글
[백준][위상 정렬][힙] 1766 - 문제집 (0) | 2023.05.11 |
---|---|
[백준][구현][완전 탐색] 1233 - 주사위 (0) | 2023.05.08 |
[백준][이진탐색] 2805 - 나무 자르기 (0) | 2023.04.30 |
[백준][이진탐색] 2110 - 공유기 설치 (0) | 2023.04.29 |
[백준][재귀] 1074 - Z (0) | 2023.04.28 |