3-4) 가장 짧은 문자거리

김예지·2021년 8월 26일
0

문제

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출 력하는 프로그램을 작성하세요.
[입력설명]
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다. 문자열의 길이는 100을 넘지 않는다.
[출력설명]
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.

입력예제 1

teachermode e

출력예제 1

10121012210


문제 풀이

코드

결과로 리턴해야하는 answer은 배열의 형태로 초기화하고, 변수 p를 통해 문자 t와 떨어져있는 거리를 측정한다.
(1) 왼쪽 e로부터 떨어진 거리(for문 방향이 왼쪽에서 오른쪽으로)
(2) 오른쪽 e로부터 떨어진 거리(for문 방향이 오른쪽에서 왼쪽으로)
(3) 1, 2번에서 구한 것 중, 작은값을 각 배열의 원소에 대입한다.(교체)

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(s, t){
                let answer=[]; //answer은 배열
                let p=100; //p는 충분히 큰 수(Number.MIN_SAFE_INTEGER)로 해주어도 되지만, 조건에서 문자열은 100을 넘지 않는다고 했으니까 이렇게 적어줌
                
                //왼쪽에 'e'로부터 떨어진 거리(for문 왼쪽에서 시작)
                for(let x of s){
                  if(x===t){
                    p=0;
                    answer.push(p);
                  }
                  else{
                    p++;
                    answer.push(p);
                  }
                }
                //오른쪽의 'e'로부터 떨어진 거리(for문 오른쪽에서 시작)
                p=100; //초기화
                for(let i=s.length-1; i>=0; i--){
                  if(s[i]===t){
                    p=0;
                    answer[i]=0; //생략 가능(어짜피 t가 있는 부분은 0이 들어있으니까)
                  }
                  else{
                    p++;
                    answer[i]=Math.min(answer[i], p); //기존 answer[i]와 현재 p중 작은값을 answer[i]에 집어넣는다(p가 더 작으면 교체가 이뤄짐)
                  }
                }
                return answer;
            }
            
            let str="teachermode";
            console.log(solution(str, 'e'));
        </script>
    </body>
</html>
profile
내가 짱이다 😎 매일 조금씩 성장하기🌱

3개의 댓글

comment-user-thumbnail
2021년 9월 11일

9/10

답글 달기
comment-user-thumbnail
2021년 9월 11일

9/11

답글 달기
comment-user-thumbnail
2021년 11월 4일
function solution(s, t){  
    let left=[];
    let right=[];
    let x=100;
    //왼쪽 t와 떨어진 거리 
    for(let i=0; i<s.length; i++){
        if(s[i]===t){
            x=0;
            left.push(x++);
        }
        else left.push(x++);
    }
    //오른쪽 t와 떨어진 거리 
    x=100;
    for(let i=s.length-1; i>=0; i--){
        if(s[i]===t){
            x=0;
            right.push(x++);
        }
        else right.push(x++);
    }
    right=right.reverse();

    answer=[];
    for(let i=0; i<left.length; i++){
        if(left[i]<right[i]) answer.push(left[i]);
        else answer.push(right[i]);
    }
    return answer.join('');
}
let str="teachermode";
console.log(solution(str, 'e'));
답글 달기