가장 가까운 글자

Polla·2023년 1월 14일
0

programmers

목록 보기
22/58
post-thumbnail

프로그래머스 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값
되니,
이렇게 쓰는 방식도 있구나 싶었다...

다음엔 써봐야지..

profile
트러블 슈팅 Blog => https://polla.palms.blog/home

0개의 댓글