티스토리 뷰

알고리즘/코딩테스트 공부

3-4 가장 짧은 문자거리

YG - 96년생 , 강아지 있음, 개발자 희망 2021. 11. 27. 14:00

문제

한 개의 문자열 s와 문자 t가 주어지면 문자열 s의 각 문자가 문자 t와 떨어진 최소거리를 출
력하는 프로그램을 작성하세요.

풀이

function solution(s, t) {
  let answer = [];
  let cnt = 1000;
  let arr1 = [];
  let arr2 = [];

  let backCnt = 1000;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === t) {
      cnt = 0;
      arr1.push(cnt);
    } else {
      cnt++;
      arr1.push(Math.min(cnt));
    }
  }

  for (let i = s.length - 1; i >= 0; i--) {
    //console.log(s[i]);
    if (s[i] === t) {
      backCnt = 0;
      arr2.push(backCnt);
    } else {
      backCnt++;
      arr2.push(backCnt);
    }
  }
  arr2 = arr2.reverse();
  //console.log(arr1, arr2);

  // console.log(arr2.length);
  for (let i = 0; i < arr1.length; i++) {
    answer.push(Math.min(arr1[i], arr2[i]));
  }

  return answer;
}

let str = "tafawfewqsagkihswigehawe";
console.log(solution(str, "e"));

 

for 문을 3개를 사용하였고 앞에서부터 cnt를 세어 arr1의 배열을 만들고 다시 뒤에서부터 cnt를 세어 arr2의 배열을 만들어서 answer.push(Math.min(arr1[i],arr2[i])로 정답을 풀었습니다.

 

다른 풀이

function solution(s, t) {
  let answer = [];
  let cnt = 1000;
  for (let i = 0; i < s.length; i++) {
    if (s[i] === t) {
      cnt = 0;
      answer.push(cnt);
    } else {
      cnt++;
      answer.push(cnt);
    }
  }

  cnt = 1000;

  for (let i = s.length - 1; i >= 0; i--) {
    //console.log(s[i]);
    if (s[i] === t) cnt = 0;
    else {
      cnt++;
      answer[i] = Math.min(answer[i], cnt);
    }
  }

  return answer;
}

let str = "tafawfewqsagkihswigehawe";
console.log(solution(str, "e"));

for 문 2개로 더 간략하게 만든 코드입니다. cnt와 answer 로 진행하였고 앞과 뒤에서부터 세는 방식은 동일하지만

answer[i] = Math.min(answer[i],cnt) 로 코드가 간결해졌습니다.

'알고리즘 > 코딩테스트 공부' 카테고리의 다른 글

4-1 자릿수의 합  (0) 2021.11.28
3-5 문자열 압축  (0) 2021.11.27
3-3 숫자만 추출  (0) 2021.11.27
3-2 유효한 팰린드롬  (0) 2021.11.27
3-1 회문 문자열  (0) 2021.11.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
글 보관함