본문 바로가기
Coding Test

[ Coding test ] 가장 가까운 같은 글자 (Python)

by 동토리 2023. 2. 25.

↓ 코딩 테스트 사이트 ↓

코딩테스트 연습 | 프로그래머스 스쿨 (programmers.co.kr)

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

[ 가장 가까운 같은 글자 ]

- 난이도 : Lv.1

 

※ 문제 설명 ※

더보기

문자열 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은 영어 소문자로만 이루어져 있습니다.

입출력 예

          s                        result
"banana" [-1, -1, -1, 2, 2, 2]
"foobar" [-1, -1, 1, -1, -1, -1]

입출력 예 설명

입출력 예 #1
지문과 같습니다.

입출력 예 #2
설명 생략

↓ Python 코드 ↓

 

def solution(s):
    answer = []
    s = list(s)
    for i in range(len(s)):
        if s[i] in s[:i]:
            answer.append(i-s.index(s[i]))
            s[s.index(s[i])] = '0'
        else:
            answer.append(-1)
    return answer

문자열 s를 list로 변환한 후 s의 크기만큼 for문을 돌린다.

s의 인덱스 i번째의 알파벳이 s 문자열 안에 이미 있는 경우엔 그 거리를 구한 후 '0'으로 변환시켜 준다.

그 이유는 i번째 문자로부터 가장 가까운 거리에 있는 인덱스와의 거리를 입력해야 하기 때문에 앞에서 이미 계산된 알파벳과 중복되는 경우를 방지하기 위해서 이미 앞쪽에서 처리된 알파벳은 '0'으로 변환시킨 것이다.

 

이외에 겹치지 않는 문자들은 '-1'로 바꿔줌으로써 문제 해결!

근데 이 방식으로 하면 나중에 문자열이 어어어엄청 길어졌을 경우 실행시간이 오래 걸리는 방법이니... 

다른 좋은 방법, 예를 들어 이중 for문을 사용하여 하나는 역순으로 리스트를 읽어 들이는 방식을 사용하면 시간이 훨씬 줄어든다. =.= 

아무튼 이번 문제에서 말하는 최고 문자열 길이가 10,000으로 그리 길지 않아서 통과할 수 있었당!

 

-- 느낀 점 --

확실히 그동안엔 대충 굴러만 가면 됐지 뭐~ 했는데 점점 기능에 신경을 써야 한다는 게 느껴졌다... 

아직 3번째 코딩 테스트라서 그런지 뇌가 딱딱한 것이 아주그냥 불편한거시다.

계속 풀어야지

댓글