[알고리즘] 배달
·
알고리즘
문제 설명 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 예시입니다. 위 그림에서 1번 마을에 있는 음식점은 [1, 2, 4, 5] 번 마을까지는 3 이하의 시간에 배달할 수 있습니다. 그러나 3번 마을까지는 3시간 이내로..
[알고리즘] 위장
·
알고리즘
문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. cloth..
[알고리즘] 기준이 되는 배열로 만들 수 있는 모든 배열을 만들기
·
알고리즘/풀이 힌트
0. 들어가며 프로그래머스 후보키를 풀다가 기준이 되는 배열을 가지고 크기가 2, 3, 4 , ... 모든 경우의 배열을 만들어야 했는데 이런 경우도 생각보다 많이 나와서 한번 정리해보았다. 1. 사용 방식 [ 1, 10, 30, 50, 100, 300 ]인 기준 배열이 있다면 기준 배열을 가지고 [ 1 ], [ 10 ], [ 30 ], ... [ 300 ], [ 1, 10 ], [ 1, 30 ], ... [ 1, 10, 30, 50, 100, 300 ] 의 배열을 만든다. 한번에 만들 수 있지만, 원하는 크기의 배열을 만드는 방식으로 작업했다. 2. 코드 구현 const obj = []; const numberArr = [ 1, 10, 30, 50, 100, 300 ]; function makeArr(..
[알고리즘] 후보키
·
알고리즘
문제 설명 프렌즈대학교 컴퓨터공학과 조교인 제이지는 네오 학과장님의 지시로, 학생들의 인적사항을 정리하는 업무를 담당하게 되었다. 그의 학부 시절 프로그래밍 경험을 되살려, 모든 인적사항을 데이터베이스에 넣기로 하였고, 이를 위해 정리를 하던 중에 후보키(Candidate Key)에 대한 고민이 필요하게 되었다. 후보키에 대한 내용이 잘 기억나지 않던 제이지는, 정확한 내용을 파악하기 위해 데이터베이스 관련 서적을 확인하여 아래와 같은 내용을 확인하였다. 관계 데이터베이스에서 릴레이션(Relation)의 튜플(Tuple)을 유일하게 식별할 수 있는 속성(Attribute) 또는 속성의 집합 중, 다음 두 성질을 만족하는 것을 후보 키(Candidate Key)라고 한다. 유일성(uniqueness) : ..
[알고리즘] 이진 탐색 - JavaScript
·
알고리즘/풀이 힌트
0. 들어가며 프로그래머스 순위 탐색 문제를 풀다가 이진 탐색을 실제로 사용해야 하는 상황이 발생해서 정리를 해보았다. 이진 탐색 자체에 대한 내용은 깊게 다루지 않고 어느 정도 이해한 상태라고 가정하고 작성한다. 1. 사용 방식 [10, 30, 50, 60, 100, 200] 이란 배열이 있을 때, 기준 값으로 70이 주어지면 배열에서 70 이상의 값의 개수가 몇 개인지 확인할 때 사용하였다. 2. 코드 구현 for (const item of query) { // item은 query의 값 const key = item.split("and ").join("").split(" "); const score = parseInt(key.pop()); const joinKey = key.join(" "); co..
[알고리즘] 배열을 반복해 순차적으로 값을 변경 및 수정하기
·
알고리즘/풀이 힌트
0. 들어가며 프로그래머스 순위 탐색 문제를 풀다가 배열을 참조해서 순차적으로 배열을 변경하는 경우가 의외로 많이 있는 것 같아서 정리하였다. 1. 사용 방식 예를 들어 [a, b, c, b, e]라는 배열이 있는데, 이것을 [-, b, c, d, e], [-, -, c, d, e], ... [a, b, c, d, -] 순으로 모든 경우의 수를 다 만들어야 하는 상황이 있을 것이다. 그럴 경우에 반복문을 통해서 만들어도 되지만 그렇게 만들려면 배열의 길이는 고정되야하고 배열의 속성 개수에 따라 반복문 개수도 변경되기 때문에 일반적으로 재귀함수를 사용한다. 2. 코드 구현 const info = [ "java backend junior pizza 150", "python frontend senior chi..
[알고리즘] 순위 검색
·
알고리즘
문제 설명 카카오는 하반기 경력 개발자 공개채용을 진행 중에 있으며 현재 지원서 접수와 코딩테스트가 종료되었습니다. 이번 채용에서 지원자는 지원서 작성 시 아래와 같이 4가지 항목을 반드시 선택하도록 하였습니다. 코딩테스트 참여 개발언어 항목에 cpp, java, python 중 하나를 선택해야 합니다. 지원 직군 항목에 backend와 frontend 중 하나를 선택해야 합니다. 지원 경력구분 항목에 junior와 senior 중 하나를 선택해야 합니다. 선호하는 소울푸드로 chicken과 pizza 중 하나를 선택해야 합니다. 인재영입팀에 근무하고 있는 니니즈는 코딩테스트 결과를 분석하여 채용에 참여한 개발팀들에 제공하기 위해 지원자들의 지원 조건을 선택하면 해당 조건에 맞는 지원자가 몇 명인 지 쉽..
[알고리즘] 예상 대진표
·
알고리즘
문제 설명 △△ 게임대회가 개최되었습니다. 이 대회는 N명이 참가하고, 토너먼트 형식으로 진행됩니다. N명의 참가자는 각각 1부터 N번을 차례대로 배정받습니다. 그리고, 1번↔2번, 3번↔4번, ... , N-1번↔N번의 참가자끼리 게임을 진행합니다. 각 게임에서 이긴 사람은 다음 라운드에 진출할 수 있습니다. 이때, 다음 라운드에 진출할 참가자의 번호는 다시 1번부터 N/2번을 차례대로 배정받습니다. 만약 1번↔2번 끼리 겨루는 게임에서 2번이 승리했다면 다음 라운드에서 1번을 부여받고, 3번↔4번에서 겨루는 게임에서 3번이 승리했다면 다음 라운드에서 2번을 부여받게 됩니다. 게임은 최종 한 명이 남을 때까지 진행됩니다. 이때, 처음 라운드에서 A번을 가진 참가자는 경쟁자로 생각하는 B번 참가자와 몇 ..