반응형
문제 3-4번
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출 력하는 프로그램을 작성하세요.
🍄 입력설명
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다. 문자열의 길이는 100을 넘지 않는다.
🍄 출력설명
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
🍄 입력예제 1
teachermode e
🍄 출력예제 1
1 0 1 2 1 0 1 2 2 1 0
정답 코드
- 문제를 먼저 잘 이해한다. t로 주어진 값(예제에서는 e)는 문자열 좌, 우를 기준으로 몇번째에 있는지 찾고, 좌/우 중에 최소값을 배열에 넣어서 출력하는 문제이다. 예를들면 teachermode 의 4번쨰 인덱스에 있는 h에서 e는 왼쪽으로 3번째, 오른쪽으로 1번째에 있으므로 최소값인 1을 answer 배열에 추가한다.
- for문을 두 번 돈다. 첫번째 for문은 왼쪽에서 오른쪽으로 탐색하고, 두번째 for문은 오른쪽에서 왼쪽을 탐색한다. 두번의 탐색에서 최소값을 answer 배열에 추가한다.
- 문자열의 길이는 1000을 넘지 않으므로, p를 1000으로 둔다. for문에서 t를 만나면 p를 0으로 초기화하고, p를 만나지 않으면 숫자를 1씩 증가시킨다.
- 첫번째 for문에서 answer 배열을 채워준다. 두번째 for문에서는 t를 만나면 어차피 0이고, t가 아닌 수를 만났을때 기존 answer[i] 번째 배열과, 현재 p값을 비교하여 더 작은 값을 (Math.min) 비교하여 바꿔준다.
function solution(s, t) {
let answer = [];
let p = 1000;
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(p, answer[i]);
}
}
return answer;
}
let str = "teachermode";
let t = "e";
console.log(solution(str, t));
// (11) [1, 0, 1, 2, 1, 0, 1, 2, 2, 1, 0]
728x90
반응형
'알고리즘' 카테고리의 다른 글
[JS] 알고리즘 기초 정복 4-1번_자릿수의 합 (0) | 2021.07.16 |
---|---|
[JS] 알고리즘 기초 정복 3-5번_문자열 압축 (0) | 2021.07.15 |
[JS] 알고리즘 기초 정복 3-3번_숫자만 추출 (0) | 2021.07.15 |
[JS] 알고리즘 기초 정복 3-2번_유효한 팰린드롬 (0) | 2021.07.15 |
[JS] 알고리즘 기초 정복 3-1번_회문 문자열 (0) | 2021.07.15 |