코플릿/알고리즘 8

08_[GCD] 빼빼로 데이

문제 오늘은 빼빼로 데이입니다. 한 회사의 팀장은 출근길에 아몬드 빼빼로 M개와 누드 빼빼로 N개를 구매하여 아침 일찍 출근길에 나섰습니다. 팀장은 자신보다 먼저 출근해 있는 직원들에게 구매한 빼빼로를 전부 나누어 주려고 합니다. 단, 서로 질투하는 경우를 만들지 않기 위해 모든 직원들에게 공평하게 빼빼로를 나누어 주려고 합니다. 직원들은 각각의 빼빼로를 똑같은 개수만큼 받아야 합니다. 빼빼로를 쪼개서 줄 수는 없습니다. 하지만 회사에 도착하기 전이라 몇 명의 직원들이 있는지 모르는 상황입니다. 팀장이 아몬드 빼빼로를 4개, 누드 빼빼로를 8개를 구매 했다면, 다음과 같이 세 가지 방법으로 나누어 줄 수 있습니다. 출근한 직원이 1명이라면 아몬드 빼빼로 4개와 누드 빼빼로 8개를 줄 수 있습니다. 출근한..

07_[조합] 블랙잭은 지겨워

문제 평범한 블랙잭 게임에서 수시로 패배하자 흥미가 떨어진 김코딩은 박타짜에게 게임룰을 변형하여 새로운 카드 놀이를 해 볼 것을 제안합니다. 새로운 룰은 다음과 같습니다. 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 ..

06_[순열] 새로운 치킨 소스 레시피

문제 개업 이래로 항상 승승장구하는 '승승장구 치킨집'의 비결은 소스에 있다. 수많은 타사 브랜드 치킨집들이 승승장구 치킨집의 소스 비결을 알아내려고 했으나 빈번히 포기했다. 그 이유는 5대째 내려오는 '비밀의 승승장구 치킨 소스 비율 레시피'는 70억 인구 중 사장님만 알고 있기 때문이다. 최근, 누리꾼 사이에서 이 레시피의 일부분을 발췌했다는 소문을 듣게 되었다. 그 소문은 다음과 같다. N 가지의 재료 중에 단 M 가지만을 사용하여 조합한 모든 경우의 수 중 하나이다. 재료는 0과 1로만 이루어진 숫자로 암호화가 되어 있고, 항상 1로 시작하며 복호화를 할 수 없다. 단, 0이 3개 이상인 재료는 상한 재료이기 때문에 제외한다. 재료의 순서에 따라 맛이 달라지기 때문에, 재료를 넣는 순서가 다르다면..

05_rockPaperScissors

문제 가위바위보 게임은 2인 이상의 사람이 동시에 '가위, 바위, 보'를 외치고 동시에 가위, 바위 또는 보 중에서 한 가지를 의미하는 손 모양을 내밀어 승부를 결정짓는 게임입니다. 세 판의 가위바위보 게임을 할 경우, 한 사람은 세 번의 선택(예. 가위, 가위, 보)을 할 수 있습니다. 세 번의 선택으로 가능한 모든 경우의 수를 구하는 함수를 작성합니다. 더보기 // Advanced가 포함된 레퍼런스 코드입니다. const rockPaperScissors = function (rounds) { // rounds 매개변수를 임의로 넣습니다. // rounds 변수가 있을 경우 그대로 사용하고, 없다면 3(기본)을 사용합니다. rounds = rounds || 3; const rps = ['rock', '..

03_[구현] 보드 게임

문제 N * N의 크기를 가진 보드판 위에서 게임을 하려고 합니다. 게임의 룰은 다음과 같습니다. 좌표 왼쪽 상단(0, 0)에 말을 놓는다. 말은 상, 하, 좌, 우로 이동할 수 있고, 플레이어가 조작할 수 있다. 조작의 기회는 딱 한 번 주어진다. 조작할 때 U, D, L, R은 각각 상, 하, 좌, 우를 의미하며 한 줄에 띄어쓰기 없이 써야 한다. 예시: UDDLLRRDRR, RRRRR 한 번 움직일 때마다 한 칸씩 움직이게 되며, 그 칸 안의 요소인 숫자를 획득할 수 있다. 방문한 곳을 또 방문해도 숫자를 획득할 수 있다. 보드 밖을 나간 말은 OUT 처리가 된다. 칸 안의 숫자는 0 또는 1이다. 단, 좌표 왼쪽 상단(0, 0)은 항상 0이다. 획득한 숫자를 합산하여 숫자가 제일 큰 사람이 이기게..

02_[Greedy] 편의점 알바

문제 편의점에서 아르바이트를 하고 있는 중에, 하필이면 피크 시간대에 손님에게 거스름돈으로 줄 동전이 부족하다는 것을 알게 되었습니다. 현재 가지고 있는 동전은 1원, 5원, 10원, 50원, 100원, 500원으로 오름차순으로 정렬되어 있고, 각 동전들은 서로 배수 관계에 있습니다. 동전 개수를 최소화하여 거스름돈 K를 만들어야 합니다. 이때, 필요한 동전 개수의 최솟값을 구하는 함수를 작성해 주세요. 더보기 function partTimeJob(k) { // TODO: 여기에 코드를 작성하세요. // k의 값이 500문으로 나눠 떨어지면 리턴 count // 그렇지 않으면 몫을 count에 더해주고 // 나머지 값을 100으로 나눠 준다. // 2,3,4를 50, 10, 5, 1로 반복한다. // l..

01_[Greedy] 짐 나르기

문제 김코딩과 박해커는 사무실 이사를 위해 짐을 미리 싸 둔 뒤, 짐을 넣을 박스를 사왔다. 박스를 사오고 보니 각 이사짐의 무게는 들쭉날쭉한 반면, 박스는 너무 작아서 한번에 최대 2개의 짐 밖에 넣을 수 없었고 무게 제한도 있었다. 예를 들어, 짐의 무게가 [70kg, 50kg, 80kg, 50kg]이고 박스의 무게 제한이 100kg이라면 2번째 짐과 4번째 짐은 같이 넣을 수 있지만 1번째 짐과 3번째 짐의 무게의 합은 150kg이므로 박스의 무게 제한을 초과하여 같이 넣을 수 없다. 박스를 최대한 적게 사용하여 모든 짐을 옮기려고 합니다. 짐의 무게를 담은 배열 stuff와 박스의 무게 제한 limit가 매개변수로 주어질 때, 모든 짐을 옮기기 위해 필요한 박스 개수의 최소값을 return 하도록..

자바스크립로 구현하는 스택

먼저 스택에 대해서 생각해보자 스택의 성질은 나중에 들어간 원소가 먼저 나오는 성질을 가진다. 스택에는 여러가지 메소드들이 있는데 그 중 대표적인게 push, pop, size이다. push는 스택의 stack의 맨 마지막에 값을 추가해주는 기능 pop은 스택의 맨 마지막의 값을 제거하는 기능 size는 현재의 크기를 알려주는 기능이다. 자바스크립트의 스택을 구현하기 앞서 스택의 작동원리를 알아보면 처음 스택을 만들어줄 경우 top === 0 즉 아무것도 없는 상태가 됩니다. 그 다음 push로 A라는 top이 가르키는 인덱스에 값을 추가하고 top을 +1해줍니다. 그렇게 되면 top === 1이 되겠죠. 그 다음 pop을 해주게 되면 top - 1이 가르치고 았는 값에 제거해주고 그 다음 top - 1..