목록Algorithms (14)
유리의 개발새발
문제 설명당신에게 예산 mmm원이 있습니다.앞에 상품이 nnn개 있고, 각 상품은 가격 + 배송비 로 구성됩니다.단, 한 상품에 대해서는 가격을 50% 할인받을 수 있습니다.이때, 예산 안에서 가능한 한 많은 상품을 구매하려 합니다.과연 최대 몇 개를 살 수 있을까요? --- 늘 그랬듯 코드부터 던지겠습니다.function solution(m, arr) { let answer = 0; const n = arr.length; // 총 비용(가격+배송비)으로 정렬 arr.sort((a, b) => a[0] + a[1] - (b[0] + b[1])); for (let i = 0; i --- 문제를 읽으면 딱! 어떤 알고리즘을 써야할 지 나와야 하는데 저는 아직 부족한가 봅니다.이건 완전탐색(블루투포..
현수네 반 선생님은 반 학생들의 수학점수를 향상시키기 위해 멘토링 시스템을 만들려고 합니 다. 멘토링은 멘토(도와주는 학생)와 멘티(도움을 받는 학생)가 한 짝이 되어 멘토가 멘티의 수학공부를 도와주는 것입니다. 선생님은 M번의 수학테스트 등수를 가지고 멘토와 멘티를 정합니다. 만약 A학생이 멘토이고, B학생이 멘티가 되는 짝이 되었다면, A학생은 M번의 수학테스트에서 모두 B학생보다 등수가 앞서야 합니다. M번의 수학성적이 주어지면 멘토와 멘티가 되는 짝을 만들 수 있는 경우가 총 몇 가지 인지 출력하는 프로그램을 작성하세요.전형적인 블루투포스(완전탐색) 문제이죠.코드 먼저 짜보고 설명해볼게요. function solution(test) { let answer = 0; let testCount = te..
https://school.programmers.co.kr/learn/courses/30/lessons/42586 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr오늘은 시간이 없어서, 비교적 쉬운 문제를 풀겠습니다. 1. 각 작업들에 대하여, 남은 일 수를 계산해서 배열화 합니다.2. 0번 인덱스부터 순회하면서 배포 그룹을 정하면서 카운트를 합니다. 이게 끝입니다. // 각 작업의 남은 작업일을 계산// 현재 배포 그룹의 최대 작업일(maxDay)보다 작거나 같으면 같이 배포// 크다면 지금까지의 count를 answer에 추가하고 새 배포 그룹 시작function solution(progresses, speed..
https://school.programmers.co.kr/learn/courses/30/lessons/12945 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 쉬워보이죠? 저도 그래보였어요. 당연히 재귀로 풀면 될 줄 알았습니다.근데 시간복잡도에서 아작이 나버렸죠. 이걸 재귀로 풀면 매우 매우 매우 매우 매우 매우 매우 매우 느려집니다.코드부터 던지고 설명하겠습니다.function solution(n) { let f0 = 0 let f1 = 1 for(let i = 2; i 피보나치 수열의 시작 값인 F(0) = 0, F(1) = 1 이 두 개를 f0, f1에 담아둡니다.그리고 ..
https://school.programmers.co.kr/learn/courses/30/lessons/12911 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr아...문제를 보는 순간 작년 생각이 났다.모 대기업의 코테에 2진수 가지고 별 짓거리 다 하던... “2진수 만들어서 뭐 하면 되나?” 라고 생각하는 순간 우리는 코테 탈락입니다.그냥 2진수로 바꿔서 1의 개수만 세면 된다.우선 이진수 구하는 방식은 2로 나눈 나머지를 역순으로 쭉 이어붙이면 된다.하.지.만 여기서는 이진수로 만들라는게 아니다!대게, 진짜 다 2진수로 변환해서 비교하면 시간 복잡도가 아작이 납니다. toString() 아시죠?여기에는 r..
https://school.programmers.co.kr/learn/courses/30/lessons/12924 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 프로 코테 탈락자로서 배운 것이 있다면 문제를 읽자마자 '아, 이건 ○○ 공식이네!' 하고 떠오르지 않으면 위험하다 입니다.그런데 말입니다. 저는 이 문제를 보자마자 "DFS로 풀어볼까?" 라고 생각했습니다.네, 그 순간 이미 탈락입니다. function solution(n) { let answer = 0; function DFS(start, sum) { if (sum === n) { answer++; ..
https://school.programmers.co.kr/learn/courses/30/lessons/131127 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 자! 풀이가 바로 나와야 하는데, 물론 내 머리에서는 바로 안 나와요.그래서 맨날 코딩 테스트에서 떨어지나 봐요. ㅎ한 10분 고민하다 제가 선택한 방법은 바로 "슬라이딩 윈도우"슬라이딩 윈도우가 뭐냐?슬라이딩 윈도우는 말 그대로 "창문을 슬슬 옮기면서 본다"라는 뜻인데, 배열에서 일정 구간을 계속 확인해야 할 때 사용하는 방법입니다! 내가 이걸 왜 아냐? 코테에서 나온 적 있음! 물론 떨어졌음ㅎ여기서는 10일 동안 할인되는 제품을 확인해야..
이 게시글은 문제 풀이용이 아닙니다. 그래프(Graph)라는 자료 구조를 이용해 다양한 문제를 해결하는 방법이 있음.그래프라는 개념을 간단히 설명하자면, 그래프는 꼭짓점(또는 정점)과 모서리(또는 간선)로 이루어진 구조야.꼭짓점들의 모음: vertices모서리들의 모음: edges근데 왜 이게 뭐 어쨌다고? 얻다 써먹냐고?봐봐요. SNS 앱들에서 팔로우 관계는 어떻게 연결되어 있을 것 같음? 느낌 옴? 각 사용자 프로필을 꼭짓점으로 보고, 그 사용자들의 연결(팔로우 여부)을 모서리로 나타낸다.이 외에도 GPS 경로 탐색 같은 다양한 곳에서 그래프가 쓰임.그래프에는 보편적으로 많이 쓰이는 몇 가지 유형이 있다.1. 무방향성 그래프(Undirected Graph)꼭짓점을 연결하는 모서리가 양방향인 그래프! ..
문제 설명이진수로 이루어진 문자열 S가 주어집니다. 이 문자열을 0으로 만들기 위한 최소한의 연산 횟수를 구하는 문제입니다.연산 규칙:이진 문자열을 10진수로 변환했을 때 짝수면, 이진수에서 2로 나누는 연산을 수행할 수 있습니다.이진 문자열을 10진수로 변환했을 때 홀수면, 이진수에서 1을 빼는 연산을 수행해야 합니다. 입력이진 문자열 S가 주어집니다. (1 ≤ S의 길이 ≤ 1000)S는 '1'로 시작하며, '0' 또는 '1'로만 구성됩니다.출력이진 문자열을 0으로 만들기 위한 최소한의 연산 횟수를 출력합니다. 나는 처음에 이렇게 풀었었다.func solution(_ S: inout String) -> Int { var count: Int = 0 var num = Int(S, radix: ..
https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 이 문제는 JS로 코딩했습니다. (문제가 Swift 지원 안 함, 추 후에 혼자 한 번 만들고 맨 밑에 추가하겠다.)프로 대기업 코테 탈락러로서 말합니다.이거 무.조.건.반.드.시 외우세요. 문제의 요구 사항을 간단하게 말하자면시작점 (0, 0)에서 도착점 (n-1, m-1)에 도착하기까지 최단거리를 구하고, 도착이 불가능할 경우 -1을 출력하라.가 되겠죠. 전형적인 BFS/DFS 문제입니다.난 진짜 ..