https://school.programmers.co.kr/learn/courses/30/lessons/160586

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(keymap, targets) {
    var answer = [];
    var map = new Map();
    keymap.forEach((keys) => {
    for (let idx = 0; idx < keys.length; idx++) {
      let k = keys[idx];
      if (!map.has(k)) {
        map.set(k, idx + 1);
      } else {
        if (map.get(k) > idx + 1) {
          map.set(k, idx + 1);
        }
      }
    }
  });
    
    targets.forEach((t) => {
    let ans = 0;

    for (let i = 0; i < t.length; i++) {
      if (!map.has(t[i])) {
        ans = -1;
        break;
      } else {
        ans += map.get(t[i]); 
      }
    }

    answer.push(ans); 
  });
    return answer;
}

 

keymap으로 넘어오는 값을 배열로 착각하고 forEach로 풀었더니 초반에 오류가 발생했는데

for 반복문으로 푸니까 바로 해결이 되었다 ㅎㅎ 간단한문제! 

function solution(begin, target, words) {

    if (!words.includes(target)) return 0;

  
    let queue = [[begin, 0]]; 
    let wordAll = new Set(words); 
    let now = begin;
    let answer = 0;
 
    function findSimilar(word1, word2) {
        let diff = 0;
        for (let i = 0; i < word1.length; i++) {
            if (word1[i] !== word2[i])
                diff++;
            if (diff > 1) return false; 
        }
        return diff === 1; 
    }

  
    while (queue.length > 0) {
        let [current, step] = queue.shift();

      
        if (current === target) return step;

     
        for (let word of wordAll) {
            if (findSimilar(current, word)) {
                queue.push([word, step + 1]); 
                wordAll.delete(word); // 방문한 단어는 Set에서 제거
            }
        }
    }

  
    return 0;
}

아직도 이해가 잘 안 된다.........................

https://school.programmers.co.kr/learn/courses/30/lessons/42840

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(answers) {
  var answer = [];
  var ansMap = new Map();
  ansMap.set(1, 0);
  ansMap.set(2, 0);
  ansMap.set(3, 0);

  var one = [1, 2, 3, 4, 5];
  var two = [2, 1, 2, 3, 2, 4, 2, 5];
  var three = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5];
  var myAnswer = [one, two, three];

  answers.forEach((a, idx) => {
    myAnswer.forEach((m, num) => {
      if (a === m[idx % m.length]) {
        ansMap.set(num + 1, ansMap.get(num + 1) + 1);
      }
    });
  });

  let res = [ansMap.get(1), ansMap.get(2), ansMap.get(3)];

  function findMaxIndices(arr) {
    if (arr.length === 0) {
      return [];
    }

    const maxValue = Math.max(...arr);

    const maxIndices = arr
      .map((value, index) => (value === maxValue ? index + 1 : -1))
      .filter(index => index !== -1);

    return maxIndices;
  }

  return findMaxIndices(res);
}

먼가 구질구질하게 푼 것 같지만...일단풀었다 ㅎㅎ 

 

https://school.programmers.co.kr/learn/courses/30/lessons/86491

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(sizes) {
    var answer = 0;
    var width = 0;
    var height = 0;
    var size = sizes.map((s)=>s[0]>s[1]?[s[1],s[0]]:s);
    size.forEach((s)=>{
            if(s[0]>width)
                width=s[0]
            if(s[1]>height)
                height=s[1]
          } 
        )
        
    return width*height;
}

width, height 비교해서 내부 정렬하고

다시 forEach 돌려서 비교하면 끝 ~ 

 

https://school.programmers.co.kr/learn/courses/30/lessons/42746#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(numbers) {
   return numbers.filter(n=>n===0).length === numbers.length ? "0" :
     numbers.sort((a,b)=>{
        const order1 = `${b}${a}`
        const order2 = `${a}${b}`
        return order1.localeCompare(order2);
    }).join('');

}

 

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

 

String.prototype.localeCompare() - JavaScript | MDN

localeCompare() 메서드는 참조 문자열이 정렬 순으로 지정된 문자열 앞 혹은 뒤에 오는지 또는 동일한 문자열인지 나타내는 수치를 반환합니다.

developer.mozilla.org

.localeCompere() 를 사용해 문자열의 순서를 비교해서 해결했다. 

 

테스트케이스 11번만 통과를 못해서 질문창을 읽어보니

11번은 numbers 값으로 0만 들어있는 (e.g [0,0,0,0,0,0,0]) 케이스 라는 것이었다 ㅂㄷㅂㄷ.... 

그래서 배열안에 들어있는 0의개수가 배열의 길이와 동일하면 문자열 0을 리턴하게끔 수정했더니 통과 할 수 있었다. 

 

 

 

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

function solution(array, commands) {
    var answer = [];

    for(i of commands){
        let larray = [...array];
        let trim = larray.slice(i[0]-1,i[1]).sort((a,b)=>a-b);
        var num = trim[i[2]-1];
        answer.push(num);
    }

    return answer;
}

 

slice와 sort 같은 자바스크립트 메서드를 쓸 줄 안다면 쉽게 풀 수 있는 문제

**splice는 원본 배열을 변경하는 메서드로 이 문제에서는 사용하면 안 됨! 

 

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

function solution(nums) {
    var max = nums.length/2;
    var ponkemon = new Map();
    for(i of nums){
        if(!ponkemon.has(i))
            ponkemon.set(i,1);
        else 
            ponkemon.set(i,ponkemon.get(i)+1);
    }
    if(ponkemon.size<max)return ponkemon.size;
    else return max;
}

해시맵으로 각 폰켓몬별 마릿수를 구하고, 

폰켓몬 / 2 값보다 폰켓몬 종류값이 큰 경우 폰켓몬 / 2 값을, 

아닐 경우 폰켓몬의 종류값을 .size로 구해서 리턴하면 된다. 

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Map

 

Map - JavaScript | MDN

Map 객체는 키-값 쌍과 키의 원래 삽입 순서를 기억합니다. 모든 값(객체 및 원시 값 모두)은 키 또는 값으로 사용될 수 있습니다.

developer.mozilla.org

자바스크립트의 해시맵을 사용할 줄 안다면 쉽게 풀 수 있는 문제다! 

 

 

https://emotion.sh/docs/typescript

 

Emotion – TypeScript

Emotion includes TypeScript definitions for @emotion/react and @emotion/styled. These definitions infer types for css properties with the object syntax, HTML/SVG tag names, and prop types. @emotion/react The easiest way to use the css prop with TypeScript

emotion.sh

이모션 공식 문서대로 

 

tsconfig.json 파일 안에 

 

{
.
.
.
.

"jsx": "react-jsx",
"jsxImportSource": "@emotion/react"
}

 

이 부분을 추가하자!

 

 

 

 

css-in-js 스타일 라이브러리중에 emotion이 코드도 깔끔하고 수정이 쉬워서 자주 사용중인데

프로젝트에 typescript를 도입하니 여기저기 에러가 튀어나온다 ...

 

번들러랑 바벨 다루는게 더 익숙해져야겠지 ~.~ 

+ Recent posts