프로그래머스 lv1 가장 가까운 글자
너무 길어서 이번엔 문제만 가져옴...😕
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다. 문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
처음에는 좀 더 효율성
있게 짜려고 시간이 걸렸지만,
처음에 생각한 방식대로 가기로 했다.
(for
문을 돌려도 10000번
이라서 그렇게 판단)
def solution(a):
ans = []
lists = ""
for i in a:
if i not in lists:
ans.append(-1)
else:
ans.append(len(lists) - lists.rfind(i) )
lists = lists + i
return ans
생각한 방법은,
공식을 먼저 찾자 싶었고, 만약 lists 라는 새로운 문자열을 만든다면,
그 값앞에 동일한 원소는 len(lists) - lists.rfind(i) 의 값이였다.
rfind()는 기존 find()와 달리 가장 뒤에 있는 원소의 인덱스 값을 불러온다.
그리고 그 lists 안에 없다면 ans라는 list에 -1을 넣고,
(혹은 for문을 len(a)로 돌렸다면 a[i]에 -1값)
list에는 i값을 하나씩 붙여줬다(not in에 쓰기 위해)
우선 for문
을 돌려도 최대 10000번
이기에 돌아가지 않기로 결정했다.
처음에는 a
에 있는 값 전체를 a.find()
후 1
일 경우, 해당 i
의 값의
index
를 찾아서 -1
을 해주고 시작하려 했으나,
( )변수
만들지 않기 위한 발악^^...
새로운걸 만들지 않고서는 힘들다는 걸 깨닳았고,
결국 for
문 돌리는건 똑같아서 지워버렸다는 이야기...
다른 분들 중에서는 , dic()를 사용해서,
내가 쓴 코드에서 굳이 lists라는 문자열을 만들지 않고 원소 값의 개수를 이용해서
가져오는 방법도 있었다.
def solution(s):
answer = []
dic = dict()
for i in range(len(s)):
if s[i] not in dic:
answer.append(-1)
else:
answer.append(i - dic[s[i]])
# 현재 i 값에서 마지막으로 기록된 원소의 i 값을 빼줌.
dic[s[i]] = i
# 'a' 값은 i 번째
return answer
이번 코드에서는 len
을 쓰면 좀 복잡해지겠다
(왜냐면 그러면 index
의 순서를 일일히 찾아야 하기 때문)
싶었는데, dict()
를 사용하니 원소가 등장한 i
값이 원소의 index값
이
되니, 이렇게 쓰는 방식도 있구나 싶었다...
다음엔 써봐야지..