한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소 거리를 출력하는 프로그램을 작성하시오.
문자열과 문자는 소문자로만 주어집니다.
[입력 예제]
teachermode e
[출력 예제]
1 0 1 2 1 0 1 2 2 1 0
어려워서 해설 초반부 보고 힌트 얻어서 겨우 풀었다..
✨힌트!✨
문자열을 앞에서 뒤로 1번, 뒤에서 앞으로 1번 순회함.
더 작은 값을 뽑기 위해 일단 초기값을 1000으로 설정해놓고,
문자 t가 아닌 문자를 만나면 ++하고, 문자 t를 만나면 0으로 초기화 함.
이렇게 하면 t에서부터의 거리가 순차적으로 나타나는데, 이 숫자들을 배열로 하나씩 push함.
앞에서 뒤로 가면 [1001,0,1,2,3,0,1,2,3,4,0] 배열이 됨.
뒤에서 앞으로 한번 더 돌면서 위에서 만든 배열과 값을 비교함.
뒤에서부터 돌면서 배열의 뒤 쪽 값과 비교해 더 작은 수가 나타나면 교체한다.
이 때 뒤에서 앞으로 한번 더 돌 때의 값은 앞에서부터 순서대로 [1,0,3,2,1,0,4,3,2,1,0]이 됨.
-> 뒤에서부터 비교해볼때 0은 같으니까 0, 4는 1보다 크니까 1로 변환, 이런식으로 비교하면서 진행함.
function solution(s,t){
let answer = []
let num = 1000
for(let i=0;i<s.length;i++){
if(s[i]===t) num = 0
else num++
answer.push(num)
}
num = 1000
for(let i=s.length-1;i>=0;i--){
if(s[i]===t) num = 0
else num++
if(answer[i] > num) answer[i] = num
}
return answer
}
let s = 'teachermode'
let t = 'e'
console.log(solution(s,t))
알파벳 대문자로 이루어진 문자열을 입력받아 같은 문자가 연속으로 반복되는 경우 반복되는 문자 바로 오른쪽에 반복 횟수를 표기하는 방법으로 문자열을 압축하는 프로그램을 작성하시오.
단 반복횟수가 1인 경우 생략합니다.
[입력 예제]
KKHSSSSE
[출력 예제]
K2HS4E
1)앤써는 빈 문자열,카운터 변수는 1로 초기화한다
2)문자열을 순회한다
->if (현재 문자 == 그 다음 문자) => 카운터++,
->else => if 카운터>1 이면 answer += 현재 문자 + 카운터, else answer+=현재문자
카운터 = 1로 다시 초기화
function solution(s){
s += '' //풀이 보완: 마지막 문자 비교 시 인덱스 오류방지를 위해 공란을 추가한다.
let answer = ''
let count = 1
for(let i=0;i<s.length;i++){
if(s[i]===s[i+1]){
count++
}else{
//풀이 보완:answer에 일단 문자는 추가하고,
//카운터가 1보다 큰 경우에만 문자화 시킨 count를 함께 추가해준다.
answer += s[i]
if(count > 1) answer += String(count)
count = 1
}
}
return answer
}
let s = 'KKHSSSSSSE'
console.log(solution(s))