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 | 31 |
Tags
- Algorithm
- 정렬
- 슬라이딩윈도우
- 버블정렬
- react
- styled-components
- 라이프사이클
- aws lightsail
- TypeScript
- JavaScript
- textarea autosize
- 해쉬
- typscript
- never타입
- tailwindcss
- next.js
- nextjs
- 그리디
- 빅오
- 투포인터
- 스택
- js알고리즘
- 큐
- 블로그만들기
- nestjs
- 알고리즘
- isNaN
- react-query
- cookie
- NextAuth
Archives
- Today
- Total
far
[JS 알고리즘] 가장 짧은 문자거리 본문
가장 짧은 문자거리
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출력하는 프로그램을 작성하세요.
입력설명
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
출력설명
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
입력예제
teachermode e
출력예제
1 0 1 2 1 0 1 2 2 1 0
// 나의 풀이
function solution(s, t){
let answer = [];
let arr = s.split('');
let num = 0
for (let i = 0; s.length > i; i++) {
if (arr.indexOf(t) > num) {
num++
} else if (arr.indexOf(t) < num) {
num--
}
answer.push(num)
arr.splice(0, 1)
}
return answer;
}
let str="teachermode";
console.log(solution(str, 'e'));
indexOf를 사용해 index의 위치에 따라 num을 변경하고 splice로 배열을 지워나가는 식으로 알고리즘을 짰다. (그러면 가장 가까운 e가 계속 갱신이 되기 때문에)
// 강의의 풀이
function solution(s, t){
let answer=[];
let p=1000; // 맨 앞이 제일 큰 수여야 오류 X
for(let x of s){
if(x===t){
p=0;
answer.push(p);
}
else{
p++;
answer.push(p);
}
}
p=1000;
for(let i=s.length-1; i>=0; i--){
if(s[i]===t) p=0;
else{
p++;
answer[i]=Math.min(answer[i], p);
}
}
return answer;
}
let str="teachermode";
console.log(solution(str, 'e'));
for문을 두 번 사용해 앞으로 한번 가면서 배열을 채우고 다시 뒤로 돌아오면서 Math.min을 사용해 p값을 바꿔주는 형식.
'알고리즘 > 알고리즘 베이스' 카테고리의 다른 글
[JS 알고리즘] 자릿수의 합 (0) | 2023.03.26 |
---|---|
[JS 알고리즘] 문자열 압축 (0) | 2023.03.25 |
[JS 알고리즘] 숫자만 추출 (0) | 2023.03.25 |
[JS 알고리즘] 유효한 팰린드롬 (0) | 2023.03.25 |
[JS 알고리즘] 회문 문자열 (0) | 2023.03.25 |
Comments