안녕하세요. 지난 포스팅의 BOJ 11720번 : 숫자의 합에서는 문자열로 입력되는 각 숫자들의 합을 계산해보았습니다. 오늘은 문자열 내의 문자가 출현되는 위치를 찾는 방법에 대해서 알아보도록 하겠습니다.
완벽한 코딩은 존재하지 않습니다. 제가 제출한 코드 역시 마찬가지고 그저 참고만 해주시길 바랍니다.
핵심 포인트
- 문자열 자료형
제출 코드
string = input()
cnt = [-1] * 26
for idx, s in enumerate(string) :
if cnt[ord(s) - 97] == -1 :
cnt[ord(s) - 97] = idx
else :
pass
for c in cnt :
print(c, end=' ')
해설
이번 문제는 입력되는 문자열의 각 알파벳 소문자가 출현하는 위치를 반환하는 문제입니다. 이때, 출현하지 않는 알파벳 소문자는 -1로 출력하고 입력되는 문자열의 첫번째 문자는 0번째 위치, 두번째 문자는 1번째 위치라고 생각하겠습니다. 일단, 각 알파벳이 출현하는 위치를 담는 변수인 cnt = [-1] * 26를 선언합니다.
다음으로 입력된 문자열 string을 순회하면서 해당 문자가 몇 번째 문자인지 알기 위해 enumerate 함수를 이용하였습니다. 예를 들어, abc라는 문자열이 입력되었을 때 enumerate(abc)를 하게 되면 반복문에서는 2가지 변수인 idx와 s를 반환하게 됩니다. a는 첫번째 문자이기 때문에 idx에는 0이 저장되고 다음으로 b는 두번째 문자이기 때문에 idx에는 1가 저장되는 식입니다. 이를 통해서 입력되는 문자열의 각 문자가 몇 번째 위치에 해당하는 지 알 수 있겠죠?
다음으로 해당 문자의 아스키 코드 표를 참조하여 ord(char) 함수를 통해 십진법으로 변환합니다. 이때, 알파벳 소문자는 97 ~ 122까지 할당되어 있기 때문에 97을 뺀 인덱스를 cnt에 해당 알파벳이 출현한 위치를 저장해주면 됩니다.
마지막으로 출력할 때는 공백을 기준으로 각 숫자를 출력해야하기 때문에 반복문으로 cnt를 순회하면서 각 알파벳 소문자의 위치를 반환해주면 됩니다. 이를 위해서 print() 함수의 end = ' '를 활용하면 출력 시 개행문자(\n)로 끝나지 않고 공백으로 끝나면서 한 줄에 출력할 수 있게 되죠!
참고자료 및 그림출처
'Programming > Coding Problem' 카테고리의 다른 글
BOJ 1157번 : 단어 공부 (0) | 2022.06.28 |
---|---|
BOJ 2675번 : 문자열 반복 (0) | 2022.06.26 |
BOJ 11720번 : 숫자의 합 (0) | 2022.06.26 |
BOJ 11654번 : 아스키 코드 (0) | 2022.06.26 |
BOJ 1065번 : 한수 (0) | 2022.06.25 |