티스토리 뷰
반응형
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은 영어 소문자로만 이루어져 있습니다.
입출력 예
s | result |
"banana" | [-1, -1, -1, 2, 2, 2] |
"foobar" | [-1, -1, 1, -1, -1, -1] |
풀이
class Solution {
fun solution(s: String): IntArray {
var answer: IntArray = intArrayOf()
var checkList = mutableListOf<Char>()
s.forEach {
if (checkList.contains(it)) {
for (i in checkList.size - 1 downTo 0) {
if (checkList[i] == it) {
answer += checkList.size - i
checkList.add(it)
break
}
}
} else {
checkList.add(it)
answer += -1
}
}
return answer
}
}
중복 문자
현재 문자가 checkList에 이미 포함되어 있다면, 가장 최근의 해당 문자를 찾는다.
checkList를 뒤에서부터 순회하면서 이전에 등장한 해당 문자를 찾으면, 해당 위치로부터의 거리를 answer에 더한다.
신규 문자
현재 문자가 checkList에 포함되어 있지 않은 경우, 현재 문자를 checkList에 추가하고, anwer에 -1을 더한다.
반응형
'Algorithm > programmers_lv1' 카테고리의 다른 글
프로그래머스 lv1 두 개 뽑아서 더하기 (Kotlin) (0) | 2023.06.23 |
---|---|
프로그래머스 lv1 2016년 (Kotlin) (0) | 2023.06.22 |
프로그래머스 lv1 모의고사 (Kotlin) (0) | 2023.06.18 |
프로그래머스 lv1 소수 찾기 (Java) (0) | 2023.06.16 |
프로그래머스 lv1 콜라 문제 (Kotlin) (0) | 2023.06.15 |
댓글