https://www.acmicpc.net/problem/10809
(브론즈 2 문제)
입력
baekjoon
출력
1 0 -1 -1 2 -1 -1 -1 -1 4 3 -1 -1 7 5 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
내 코드
S=list(input().split())
for i in range(len(S)):
k=ord("a")
if(S[i]==k):
print(S[i],end=" ")
k+=1
else:
print(-1,end=" ")
풀이(생각 과정)
처음에 문자열을 받는 과정을 정의하고 배열의 길이에 따라 아스키 코드 문자를 이용해서 일일이 비교하는 형태로 구현을 해보았다.
이런 형태로 구현시 다음 문자열을 다시 a부터 비교해야하는데 그러한 과정이 k+=1이라는 형태 때문에 비교하지 못하게 되면서 출력이 내가 원하는 형태의 출력이 되지 못한다는 사실을 알았다.
다른 풀이
S=input()
for i in 'abcdefghijklmnopqrstuvwxyz':
print(S.find(i),end=' ')
파이썬에서 가장 강력한 기능은 내장 함수가 많다는 점이다. find 함수를 사용시 입력값에서 순서를 출력해주는 기능을 가지고 있으며 없을 경우 -1을 출력하는 기능을 가지고 있다.
문제 조건에서 a부터 z까지만 등장한다고 하였으므로 a부터 z까지의 문자열 내에서 find 함수를 이용해서 비교하여 출력하는 방식으로 구현했다.
배운 점
이번 문제에서는 반복문을 통해서 해결해보려고 하였으나 2개의 수치, S를 리스트화 해서 S의 순서를 만들고 a부터 z까지의 문자열의 순서를 아스키 코드를 이용해서 만들어 두고 일일이 비교하면서 수치를 높이는 그러한 발상으로 문제를 접근하였으나 'abc...'와 같이 a부터 z의 문자열을 만들고 그 안에서 비교하는 방법을 생각하지 못했다. 앞으로 문제를 많이 풀면서 유연하게 사고할 필요가 있을 것 같다.
그리고 알고리즘 문제의 경우 다른 시험을 준비한다고 오랫동안 놓으니 감각이 떨어졌다는 느낌을 받았다. 아무래도 꾸준하게 1문제라도 푸는 습관을 들일 필요성을 느꼈다.
'알고리즘 공부 > 알고리즘 구현 기초' 카테고리의 다른 글
백준) 상수-파이썬 (0) | 2023.07.18 |
---|---|
백준) 평균-파이썬 (0) | 2023.06.23 |
백준) 바구니 뒤집기-파이썬 (0) | 2023.06.23 |
백준) 과제 안 내신분...?-파이썬 (0) | 2023.06.23 |
백준) 공 바꾸기-파이썬 (0) | 2023.06.22 |