땅따먹기 문제를 풀고 있는데 2시간동안 생각을 하는데 도저히 안 풀렸다. 계속 시간초과가 나서 이것저것 시도 해보다가 힌트라도 보자해서 봤던게 바로 DP였습니다. 그럼 DP는 과연 무엇일까? Dynamic Programming (동적 계획법) DP 뭔가 어려워보이는데 그냥 "기억하면서 문제 풀기"라고 생각하면 편합니다. 이게 뭔말이지 싶겠지만 5분만 참고 글을 읽으면 바로 이해 가능합니다. 예제는 직접 눈으로 보고 느끼면 이해가 더 쉽기에 간단한 예제를 가져와봤습니다. 바로 `피보나치 수열`입니다. 더보기 피보나치 수열 : 앞 두 개의 항목의 합이 그 다음 항목의 값이 되는 수열을 의미한다. const fib = (n) => { if (n { if (n in memo) return memo[n]; if (n
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 틀린 풀이 1 function solution(number, limit, power) { let result = 0 const box = [] for(let i = 1; i{ if(cur > limit){ acc += power }else{ acc += cur } return acc },0) } function getDivisor(number){ const divisor = [] for(let i = 1; i
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 미리 생각해둔 것 // 예외 처리 1. 같은 발음이 연속으로 있을 때 하지만 연속이 아니면 괜찮 2. 불가능한 발음이 포함되어있을 때 ex) "woowo" 풀이 순서 1. 연속으로 하는 옹알이가 있으면 제외시키기 2. 발음가능한 옹알이는 전부 공백으로 교체 3. 공백자체는 length가 0이기 때문에 모두 공백으로 교체되면 옹알이가 가능하고 하나라도 공백으로 교체되지 않으면 옹알이 불가능 function solution(babbling) { let result = 0 const babblArr = ..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 시간 복잡도 계산이랑 설계를 잘 못했다. 그리고 문제이해를 잘 못했다. 상수의 앞에 아래서부터 위로 쌓이게 된다!! 정해신 순서로 쌓인 햄버거만 포장을 한다!! 즉 재료가 빵야채빵고기빵 이렇게 쌓이면 햄버거를 만들지 못한다. 실수 포인트 1 나는 배열중에서 순서만 맞으면 중간에 무엇이 있어도 상관 안 했다. 실수 포인트 2 여기서 2중 for문을 쓰면 안되는데 썼다 why? 문제이해를 똑바로 못해서 이걸 쌓이는 도중에 햄버거를 만들어야하는데 다 쌓고 햄버거를 만들려고 해서 코드 설계 자체가 틀렸다...
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 쉬운줄 알고 바로 풀었는데 계속 시간초과가 났다. 시간복잡도를 고려를 더 하고나서 풀자! 틀린 풀이 1 function solution(players, callings) { let newPlayers = [...players] for(let i = 0; i < callings.length; i++) { const tem = newPlayers.indexOf(callings[i]) newPlayers = [...newPlayers.slice(0,tem), ...newPlayers.splice(tem+..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 먼저 처음 풀었던 코드이다. 틀린 코드 테스트케이스는 통과하지만 허점이 있다. 일단 가독성이 최악이고 처음 deliveries 배열의 끝에 원소가 0이면 잘못된 답이 출력된다. 그리고 시간초과도 떠서 이렇게 if문으로 풀 수도 있겠지만 엄청 꼼꼼하게 풀어야 하고 실수를 하면 안 된다. 이렇게 푼다고 할지라도 나중에 유지보수가 너무 힘들것 같아서 처음부터 다시 풀기로 하였다. function solution(cap, n, deliveries, pickups) { const saveCap = cap l..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 📚 나의 풀이 이 문제는 부동 소수점 오차를 조심해야한다. users의 형태 : users = [ 비율, 가격] 📃 문제 풀이 순서 1️⃣ 이모티콘 할인율 (10%, 20%, 30%, 40%)중에서 비율보다 낮은 할인율은 제거 function getDiscountRates(users) { const minRate = Math.min(...users.map(([discountRate,_]) => discountRate)) return [40, 30, 20, 10].filter((rate) => rate >= m..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 이 문제는 사소한 실수로 인해 3시간을 풀었다. 결국 테스트 케이스를 직접 9개 정도 만들고 나서 발견했다. 화살표함수를 사용했는데 return을 써주지 않아서 undefined이 계속 return되어서 되지 않았다. 그걸 찾았을 때 정말 허무했지만 그래도 기뻤다. 어떻게 하면 이런실수를 다음에 하지 않을까? 확실히 코드가 길어지고 복잡해지면 실수할 가능성이 너무 높아져서 조심해야한다. 그런다고 처음부터 리팩터링하면서 진행하면 까다로운 문제는 정말 오래걸려서 딜레마다. 일단은 최대한 주석은 많이 작..
프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 나의 풀이 이 문제가 level.1 오답률 2등이던데 이유를 알 것 같다. 조건을 명확하게 지켜야 정답이된다. 문제 풀이 순서는 아래와 같다. 📌 1. 시작 포인트 찾기 시작 포인트가 매번 0,0이 아니기 때문에 매 route마다 찾아야한다. function findStartingPoint(park) { let [nowX, nowY] = [0, 0]; for (let i = 0; i < park.length; i++) { if (park[i].indexOf('S') !== -1) { nowX = park[i]..