프로그래머스 대충 만든 자판 자바스크립트

버건디·2023년 6월 26일
0

프로그래머스

목록 보기
54/66
post-thumbnail

문제 링크


- 1차 풀이

function solution(keymap, targets) {
  let answer = [];

  for (let i = 0; i < targets.length; i++) {
    let splitTarget = targets[i].split("");
    let sum = 0;

    for (let j = 0; j < splitTarget.length; j++) {
      let minIndex = Number.MAX_SAFE_INTEGER;

      for (let k = 0; k < keymap.length; k++) {
        let index = keymap[k].indexOf(splitTarget[j]) + 1;

        if (index === 0) {
          continue;
        } else if (minIndex > index) {
          minIndex = index;
        }
      }

      if (minIndex === Number.MAX_SAFE_INTEGER) {
        sum = -1;
      } else {
        sum += minIndex;
      }
    }

    answer.push(sum);
  }

  return answer;
}

targets 의 문자열들을 다 쪼개서 반복문을 돌면서, 인덱스를 비교해주어서 그 최솟값을 합한 값을 answer에 넣어주었는데, 테케 절반 정도가 틀리게 나왔다.

이유를 보아하니

const keymap = ["ABACD", "BCEFD"];
const targets = ["ZABCD", "AABB"];

이러한 케이스가 주어졌을때 값이 [-1, 4]가 나와야하는데, -1일때 바로 리턴을 해주는것이 아닌 저 값도 더해주어서 다른 값이 나왔다.

- 수정 풀이

function solution(keymap, targets) {
  let answer = [];

  for (let i = 0; i < targets.length; i++) {
    let splitTarget = targets[i].split("");
    let sum = 0;

    for (let j = 0; j < splitTarget.length; j++) {
      let minIndex = Number.MAX_SAFE_INTEGER;

      for (let k = 0; k < keymap.length; k++) {
        let index = keymap[k].indexOf(splitTarget[j]) + 1;

        if (index === 0) {
          continue;
        } else if (minIndex > index) {
          minIndex = index;
        }
      }

      if (minIndex === Number.MAX_SAFE_INTEGER) {
        sum = -1;
        break;
      } else {
        sum += minIndex;
      }
    }

    answer.push(sum);
  }

  return answer;
}

더한 값이 -1일때 바로 break을 해주어서 해당 문자열의 반복문을 끝내도록 했다.

profile
https://brgndy.me/ 로 옮기는 중입니다 :)

0개의 댓글

관련 채용 정보