Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- PCCE
- 유연 근무제
- 최소값 만들기
- 부모의 형질을 가지는 대장균 찾기
- 로그인성공
- 공공데이터분석
- 재귀
- 데이터분석
- silver 5
- prefix_sum
- python개발자찾기
- 자동차 평균 기간 구하기
- 연속된 부분 수열의 합
- 파이썬
- 이웃한칸
- MySQL
- 백준
- level2
- 청년인재
- 대여기록이 존재하는 자동차 리스트
- 공공데이터분석청년인재
- 낮은 상관관계
- 데이터분석청년인재
- pcce 기출
- 알고리즘
- 자료구조
- PPCP
- 있었는데요
- Python
- 프로그래머스
Archives
- Today
- Total
데이터 저장소
[프로그래머스] 가장 가까운 같은 글자(Python) 본문
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/142086
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
📄문제
문자열 s가 주어졌을 때, s의 각 위치마다 자신보다 앞에 나왔으면서, 자신과 가장 가까운 곳에 있는 같은 글자가 어디 있는지 알고 싶습니다.
예를 들어, s="banana"라고 할 때, 각 글자들을 왼쪽부터 오른쪽으로 읽어 나가면서 다음과 같이 진행할 수 있습니다.
- b는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- n은 처음 나왔기 때문에 자신의 앞에 같은 글자가 없습니다. 이는 -1로 표현합니다.
- a는 자신보다 두 칸 앞에 a가 있습니다. 이는 2로 표현합니다.
- n도 자신보다 두 칸 앞에 n이 있습니다. 이는 2로 표현합니다.
- a는 자신보다 두 칸, 네 칸 앞에 a가 있습니다. 이 중 가까운 것은 두 칸 앞이고, 이는 2로 표현합니다.
따라서 최종 결과물은 [-1, -1, -1, 2, 2, 2]가 됩니다.
문자열 s이 주어질 때, 위와 같이 정의된 연산을 수행하는 함수 solution을 완성해주세요.
제한사항
- 1 ≤ s의 길이 ≤ 10,000
- s은 영어 소문자로만 이루어져 있습니다.
입출력 예
"banana" | [-1, -1, -1, 2, 2, 2] |
"foobar" | [-1, -1, 1, -1, -1, -1] |
📝 코드
def solution(s):
check = {}
result = []
for i, cur in enumerate(s):
if cur in check:
result.append(i - check[cur])
check[cur] = i
else:
result.append(-1)
check[cur] = i
return result
- 처음 이 문제를 접했을 때는 while문을 이용하여 문제를 풀이하려 했으나, 수행 시간이 너무 오래 걸려
딕셔너리 자료형을 이용하는 방법을 선택했다.
- 코드도 깔끔해지고 수행 시간도 줄어든다.
728x90
'알고리즘' 카테고리의 다른 글
[프로그래머스] 숫자 짝꿍(Python) (0) | 2023.07.10 |
---|---|
[프로그래머스] 추억 점수(Python) (0) | 2023.07.10 |
[프로그래머스] 가장 긴 팰린드롬(Python) (0) | 2022.12.06 |
[프로그래머스] 구명보트(Python) (0) | 2022.10.23 |
[프로그래머스] 영어 끝말잇기(Python) (1) | 2022.09.22 |