article thumbnail image
Published 2022. 6. 10. 14:36
가장 짧은 문자거리
한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출
력하는 프로그램을 작성하세요.
▣ 입력설명
첫 번째 줄에 문자열 s와 문자 t가 주어진다. 문자열과 문자는 소문자로만 주어집니다.
문자열의 길이는 100을 넘지 않는다.
▣ 출력설명
첫 번째 줄에 각 문자열 s의 각 문자가 문자 t와 떨어진 거리를 순서대로 출력한다.
▣ 입력예제 1
teachermode e
▣ 출력예제 1
1 0 1 2 1 0 1 2 2 1 0
 
 
 
문제를 이해해보자.
abcabbd =>s 문자열
a => t 문자
이렇게 주어졌을때, s와 t의 최소거리를 출력한다고 하면
a는 0 1 1 0 1 2 3 이렇게 출력된다.
a는 자기자신이니까 0을 반환, b는 a에서 1 떨어진거리, c는 첫번째 a에서 2 떨어진거리지만 
최소거리를 구해야하니, 두번째 a에서 c가 더 가깝고, 결국엔 1을 반환한다.
 
 
 
📌작성코드
<html>

<head>
  <meta charset="UTF-8">
  <title>출력결과</title>
</head>

<body>
  <script>
    function solution(s, t) {
      let answer = [];
      let count = 0;
      //왼쪽에서 e 비교
      for (let i = 0; i < s.length; i++) {
        if (s[i] === t) {
          count = 0;
          answer.push(count)
        } else {
          count = count + 1
          answer.push(count)
        }
      }
      //오른쪽에서 e 비교
      for (let i = s.length - 1; i >= 0; i--) {
        if (s[i] === t) {
          count = 0;
        } else {
          count = count + 1
          answer[i] = Math.min(count, answer[i]);
        }
      }
      return answer;
    }
    let str = "teachermode";
    console.log(solution(str, 'e'));
  </script>
</body>

</html>
 

우선 for문과 조건문을 사용하여 s 문자열과 t 문자를 비교해준다. 

값을 저장시킬 카운터 변수를 하나 만들고

s[i] (s의 인덱스)가 t랑 같다면? 즉 s의 문자열의 인덱스가 t랑 같으면 

위에서 했던거처럼 0을 반환하고, 배열에 저장시켜야하니 push 메소드를 사용하여 answer에 넣어준다.

s의 문자열의 인덱스와 t가 같지않으면 카운터를 +1 씩 올려주고 

그 값도 answer에 저장시켜준다.

여기까지가 s 문자열의 왼쪽 => 오른쪽으로 계산한 값이고, 

이번에는 s 문자열의 오른쪽 => 왼쪽으로 for문을 돌려야한다.

i = 0이 아닌 s 문자열의 length(끝) 부터 i 가 0 보다 크거나 같을 때, i 인덱스는 -1씩 작아지는 것이다.

여기서 s.length - 1을 한 이유는? (length 는 index와 다르게 1부터 시작하기때문이다. )

s의 문자열의 인덱스가 t랑 같으면 0반환, 문자열의 인덱스가 같지않으면 

카운터를 +1씩 올려주고,  왼쪽=>오른쪽에서 구한 결과값과 오른쪽=>왼쪽에서 구한 결과 값 중

두개의 값을 비교해서 그중에 최소값을 구해야하니까

Math.min메소드를 사용한다. 안에는 방금 값을 넣었던 count와 기존에 들어있는 answer[i]를 비교하여

answer[i]에 넣어준다. 

'알고리즘' 카테고리의 다른 글

[알고리즘 문제] 4-1번  (0) 2022.06.11
[알고리즘 문제] 3-5번  (0) 2022.06.10
[알고리즘 문제] 3-3번  (0) 2022.06.10
[알고리즘 문제] 3-2번  (0) 2022.06.08
[알고리즘 문제] 3-1번  (0) 2022.06.08
복사했습니다!