Lv 1. 비밀지도

박하린·2021년 6월 7일
0

프로그래머스

목록 보기
25/42

📚 문제

비밀지도
https://programmers.co.kr/learn/courses/30/lessons/17681

💡 접근

먼저 비트연산 논리곱 (|) 연산자로 arr1 과 arr2를 계산하여 2진수로 바꿔준다.
그리고 나서 for문으로 secretMap의 요소를 돌면서 요소들을 또 split으로 끊어주고 1일 때 # 0일때 공백 으로 리턴하고 다시 join으로 묶어서 answer배열에 넣어주었다.
이렇게 풀고나니 2진수로 바꿨을 때 맨앞자리가 0 인 숫자는 0이 생략되어서 결과값이 정답과 다르게 나왔다.
그래서 n보다 길이가 짫은 숫자는 앞에서부터 길이가 n이 될 때까지 0을 붙여주었다.
이 접근방식으로 정답이 나오긴하는데 for문 안에서 split,map,join 을 n만큼 반복하다보니 시간 복잡도가 크게 나왔던 것 같다.

다른 분의 풀이를 보고 padStart 함수와 replace에 정규식을 포함한 풀이로 돌리니 1초 이내로 결과가 나오는 걸 확인할 수 있었다..

⌨️ 코드

function solution(n, arr1, arr2) {
  const secretMap = arr1.map((v, idx) => (v | arr2[idx]).toString(2));
  const answer = [];

  for (const i in secretMap) {
    if (secretMap[i].length < n) {
      const add = n - secretMap[i].length;
      for (let j = 0; j < add; j++) {
        secretMap[i] = "0" + secretMap[i];
      }
    }
    console.log(secretMap[i].length);
    answer.push(
      secretMap[i]
        .split("")
        .map((v) => {
          if (v == 1) return "#";
          if (v == 0) return " ";
        })
        .join("")
    );
  }

  return answer;
} // 너무 오래걸림

다시 푼 풀이

function solution(n,arr1,arr2){
    return arr1.map((v,idx) => (v | arr2[idx]).toString(2).padStart(n,0).replace(/0/g,' ').replace(/1/g,'#'))
}

✅ 메소드 정리

Array.padStart()

  • 현재 문자열의 시작을 다른 문자열로 채워, 주어진 길이를 만족하는 새로운 문자열을 반환. 채워넣기는 대상 문자열의 시작(좌측)부터 적용된다.

  • syntax

	str.padStart(targetLength [, padString])
  • 매개변수

    • targetLength : 목표 문자열 길이. 현재 문자열 길이보다 작다면 채우지 않고 그대로 반환
    • padString(Optinal) : 현재 문자열에 채워넣을 다른 문자열. 문자열이 너무 길어 목표 문자열 길이를 초과한다면 좌측 일부를 잘라서 넣음. 기본값은 " ".
  • ex)

        'abc'.padStart(10);         // "       abc"
        'abc'.padStart(10, "foo");  // "foofoofabc"
        'abc'.padStart(6,"123465"); // "123abc"
        'abc'.padStart(8, "0");     // "00000abc"
        'abc'.padStart(1);          // "abc"

📝 리뷰

다시 봐도 내가 처음 푼 풀이는 시간이 많이 걸리게 푼 것 같다. 처음엔 시간 복잡도가 좀 걸리더라도 풀어보자 라는 마음가짐으로 풀긴했는데 그러다보니 너무 복잡하게 풀게되었다. 다른 사람의 풀이를 보고 이해를 못하는 것도 아닌데 왜 생각을 못했을까 ㅠ
js 내장함수를 더 공부하고 효율성에 중점을 둔 풀이를 할 수 있도록 노력해야겠다

profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보