💡문제 설명
문자가 주어지면, 문자를 하나씩 순서대로 순회하면서 앞에 같은 글자가 있으면 얼마나 가까운지를 인덱스 차로 표현하고, 없다면 그냥 -1을 반환하는 문제
💡제한 사항 및 입출력 예제
위의 입출력 예제 처럼 b > a > n > a > n > a 이렇게 순회하는데, b 는 당연히 맨 앞이니까 -1 이 반환되고 a 는 앞에 a 와 동일한 글자가 없기 때문에 -1 , n 도 -1 , 그 다음 나오는 a 는 2 칸 앞에 같은 글자가 있으니 2를 반환, n 도 2칸 앞에 n 이 있으니 2 를 반환, 마지막 a 는 앞에 같은 글자가 2개 있는데, 가장 가까운 a 와의 거리를 계산해야 하므로 2 가 반환되도록 코딩을 해야한다.
💡나의 정답
1. answer 라는 빈 리스트 생성
2. 일단 1번째 문자는 무조건 -1 추가 (to answer 리스트)
3. s1 은 기준 문자
4. 그 다음 글자부터는 prior_str 라는 빈 리스트를 만들어 주고 i 번째 전까지 문자들을 넣어준다.
5. 만약 i 번째 전 문자들에서 비교하려고 했던 기준 문자 (여기서는 s1) 와 같은 곳의 인덱스를 리스트 형태로 뽑아서 max 함수를 통해 가장 기준문자와 가까운 곳의 인덱스를 뽑아준다. 그리고 s1 의 인덱스와의 차를 answer 에 append !
6. 만약 앞서 나온 문자 중에 기준 문자와 같은 것이 없다면 -1 추가
.... 복잡하게 풀었다. ㅠ,, 연산량이 많아서 통과는 됐지만 채점하는데 시간이 오래 걸림
def solution(s):
answer = []
for i, s1 in enumerate(s) :
if i == 0 :
answer.append(-1)
else :
prior_str = [] # ['b', 'a', ...]
for j in range(i) :
prior_str.append(s[j]) # 비교하려는 문자들 , 기준 문자 앞의 문자들
if s1 in prior_str :
max_index = max(list(filter(lambda x : prior_str[x] == s1, range(len(prior_str)))))
answer.append(i - max_index)
else :
answer.append(-1)
return answer
💡다른 실력자 분들의 코드
- 딕셔너리 자료형을 활용해서 풀었음.
- 같은 문자열이 등장할 때 {key : value} 형태를 활용하여 같은 key 가 나오면 value(index) 를 갱신해주는 방법
- 그리고 (키) not in (dictionary객체) 문법을 사용해 dictionary 객체에 키가 없으면, 아직 반복된 문자열이 아님을 의미하기 때문에 -1 을 answer 리스트에 추가
answer = []
dic = {} # 빈 딕셔너리 생성,
# {"b" : 0} -> {"b" : 0, "a" : 1} -> {"b" : 0, "a" : 1, "n" : 2} -> {"b" : 0, "a" : 3, "n" : 2}
for i in range(len(s)) :
if s[i] not in dic : # 딕셔너리에 문자s[i] 와 동일한 key가 있는지 조회,, 없으면 -1 추가
answer.append(-1)
else :
answer.append(i - dic[s[i]]) # 현재 인덱스에서 앞에 나온 문자의 인덱스 빼기
dic[s[i]] = i # {요소 : 인덱스} 이 인덱스는 같은 요소가 반복되면 최신화
answer
# dictionary 의 장점 : key에 대한 값을 쉽게 저장하고 찾을 수 있음
# 복잡한 로직을 요하는 문제가 아니라서 자료형에 대한 기본적인 이해가 있다면 어렵지 않다는데,,, 난 아직 자료형에 기본적인 이해가 조금 부족한듯ㅎㅎㅎㅎㅎ; ㅠ
리스트에 너무 익숙해져서 다른 자료형을 적절한 상황에 활용을 하지 못했다.. 파이썬의 다른 자료형도 더 익숙해지고 감을 익혀서 다양한 방식으로 문제에 접근해야겠다.
'Programming > Python' 카테고리의 다른 글
[프로그래머스 Python] 명예의 전당 (1) (0) | 2024.07.16 |
---|---|
[프로그래머스 Python] 푸드 파이트 대회 (5) | 2024.07.15 |
[프로그래머스 Python] 숫자 문자열과 영단어 (0) | 2024.07.11 |
[프로그래머스 Python] 시저 암호 (0) | 2024.07.10 |
[프로그래머스 Python] 제일 작은 수 제거하기 (속도 이슈..?) (0) | 2024.07.05 |