본문 바로가기

반응형

분류 전체보기

(501)
[알고리즘/javascript][멱집합] 집밥이 그리워 문제 김코딩은 몇 년의 해외 출장 끝에 본가에 내려왔습니다. 오랜만에 보는 김코딩의 얼굴에 반가웠던 부모님은 상다리가 부러질 정도로 음식을 만들었습니다. 감동의 재회도 잠시, 의자에 앉아 식사를 하려던 김코딩은 무엇부터 먹어야 될지 깊은 생각에 빠졌습니다. 정성스럽게 차려 주신 만큼, 최대한 많은 방법으로 다양하게 먹고 싶었기 때문입니다. 밥은 한 가지이며 반찬은 다수일 때, 밥과 함께 먹을 수 있는 반찬의 모든 경우의 수를 배열에 담아 리턴하세요. 입력 인자 1: sideDishes String 타입의 영문으로 된 반찬이 나열되어 있는 배열 출력 Array 타입을 리턴해야 합니다. 밥과 함께 먹을 수 있는 반찬의 모든 경우의 수가 담긴 배열 주의사항 반찬은 영문으로 작성이 되어 있습니다. 반찬은 중복되..
[알고리즘/javascript] [GCD]빼빼로 데이 문제 오늘은 빼빼로 데이입니다. 한 회사의 팀장은 출근길에 아몬드 빼빼로 M개와 누드 빼빼로 N개를 구매하여 아침 일찍 출근길에 나섰습니다. 팀장은 자신보다 먼저 출근해 있는 직원들에게 구매한 빼빼로를 전부 나누어 주려고 합니다. 단, 서로 질투하는 경우를 만들지 않기 위해 모든 직원들에게 공평하게 빼빼로를 나누어 주려고 합니다. 직원들은 각각의 빼빼로를 똑같은 개수만큼 받아야 합니다. 빼빼로를 쪼개서 줄 수는 없습니다. 하지만 회사에 도착하기 전이라 몇 명의 직원들이 있는지 모르는 상황입니다. 팀장이 아몬드 빼빼로를 4개, 누드 빼빼로를 8개를 구매 했다면, 다음과 같이 세 가지 방법으로 나누어 줄 수 있습니다. 출근한 직원이 1명이라면 아몬드 빼빼로 4개와 누드 빼빼로 8개를 줄 수 있습니다. 출근한..
[알고리즘/javascript] [조합] 블랙잭은 지겨워 문제 평범한 블랙잭 게임에서 수시로 패배하자 흥미가 떨어진 김코딩은 박타짜에게 게임룰을 변형하여 새로운 카드 놀이를 해 볼 것을 제안합니다. 새로운 룰은 다음과 같습니다. 1. 숫자로 이루어진 카드를 여러 장 받습니다. 2. 3장씩 카드를 고르고, 3장에 적힌 숫자들의 합이 소수인지 확인합니다. 3. 받아든 카드로 만들 수 있는 소수의 개수가 많은 사람이 이기게 됩니다. 예로, [1, 2, 3, 4]라는 카드를 받았을 때 만들 수 있는 숫자는 6, 7, 8, 9이고, 소수는 7 하나이기 때문에 가지고 있는 소수의 개수는 1개입니다. [2, 3, 4, 8, 13]라는 카드를 받았을 때 만들 수 있는 숫자는 9, 13, 18, 14, 19, 23, 15, 20, 24, 25이고, 소수는 13, 19, 23 ..
[알고리즘/javascript][순열] 새로운 치킨 소스 레시피 문제 개업 이래로 항상 승승장구하는 '승승장구 치킨집'의 비결은 소스에 있다. 수많은 타사 브랜드 치킨집들이 승승장구 치킨집의 소스 비결을 알아내려고 했으나 빈번히 포기했다. 그 이유는 5대째 내려오는 '비밀의 승승장구 치킨 소스 비율 레시피'는 70억 인구 중 사장님만 알고 있기 때문이다. 최근, 누리꾼 사이에서 이 레시피의 일부분을 발췌했다는 소문을 듣게 되었다. 그 소문은 다음과 같다. N 가지의 재료 중에 단 M 가지만을 사용하여 조합한 모든 경우의 수 중 하나이다. 재료는 0과 1로만 이루어진 숫자로 암호화가 되어 있고, 항상 1로 시작하며 복호화를 할 수 없다. 단, 0이 3개 이상인 재료는 상한 재료이기 때문에 제외한다. 재료의 순서에 따라 맛이 달라지기 때문에, 재료를 넣는 순서가 다르다면..
[알고리즘/javascript][중복순열] 가위바위보 문제 가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임입니다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다. 입력 없음 출력 2차원 배열(arr[i])을 리턴해야 합니다. arr[i]는 전체 경우의 수 중 한 가지 경우(총 세 번의 선택)를 의미하는 배열입니다. arr[i]는 'rock', 'paper', 'scissors' 중 한 가지 이상을 요소로 갖는 배열입니다. arr[i].length는 3 주의사항 최종적으로 리턴되는 배열의 순서는 가중치 적용 정렬..
section4/[자료구조/알고리즘] 코딩 테스트 준비 순열과 조합 순열 순열(順列, permutation)은 서로 다른 n개의 원소를 가지는 어떤 집합에서 중복 없이 순서에 상관있게 r개의 원소를 선택하거나 혹은 나열하는 것이며, 이는 조합과 마찬가지로 n개의 원소로 이루어진 집합에서 r개의 원소로 이루어진 부분집합을 만드는 것과 같다. 순열은 조합과 달리 순서도 따져서 부분집합을 만들기 때문에 사과가 뒤로 가는 경우와 사과가 앞으로 가는 경우를 다르게 보고 각기 하나의 경우의 수로 친다. 그래서 {사과 오렌지} {오렌지 사과}가 다른 집합으로 취급된다. 순열의 식은 다음과 같다. 순열은 일반화 과정을 거쳐, Permutation의 약자 P로 표현한다. 여기서도 n은 원소의 총 개수를 의미하고, r은 그중 뽑는 개수를 의미한다. 여기서 중요한 것은, 순열은..
[알고리즘/javascript]radixSort 문제 정수를 요소로 갖는 배열을 입력받아 오름차순으로 정렬하여 리턴해야 합니다. 입력 인자 1 : arr number 타입을 요소로 갖는 배열 arr[i]는 0 이상의 정수 arr.length 100,000 이하 출력 number 타입을 요소로 갖는 배열을 리턴해야 합니다. 배열의 요소는 오름차순으로 정렬되어야 합니다. arr[i] [1, 3, 21] 힌트 기수 정렬(radix sort)은 내부적으로 계수 정렬(counting sort)을 사용합니다. 계수 정렬을 먼저 학습하고, 어떤 경우에 기수 정렬을 사용하는지 학습하도록 합니다. Advanced arr[i]의 범위가 정수 전체로 확대될 경우, 기수 정렬 알고리즘을 완성해 보세요. 계수정렬 각 요소의 배열 등장 횟수를 count해 누적합으로 나타내는 ..
section4/Unit11/[자료구조/알고리즘] 코딩 테스트 준비 시간 복잡도 문제를 해결하기 위한 알고리즘의 로직을 코드로 구현할 때, 시간 복잡도를 고려한다는 것은 한 문장으로 정리하자면 다음과 같다. 입력값의 변화에 따라 연산을 실행할 때, 연산 횟수에 비해 시간이 얼마만큼 걸리는가? 앞서 이야기했던 효율적인 알고리즘을 구현한다는 것은 바꾸어 말해 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘을 구성했다는 이야기이다. 그리고 이 시간 복잡도는 주로 빅-오 표기법을 사용해 나타낸다. Big-O 표기법 시간 복잡도를 표기하는 방법은 다음과 같다. Big-O(빅-오) Big-Ω(빅-오메가) Big-θ(빅-세타) 위 세 가지 표기법은 시간 복잡도를 각각 최악, 최선, 중간(평균)의 경우에 대하여 나타내는 방법이다. 이 중에서 Big-O 표기법이 가장 자주..

반응형