목록algorithm (13)
coding etude
어려운 문제는 아니라고 생각이 든다. 첫 시작점을 찾고, 이동의 조건에 마추어 이동과 멈춤을 조건식으로 표기하는 단순한 문제... 이문제의 중점은.. 얼마나 효율적으로 코드를 줄이는가...인건가..? 다른 분들의 풀이를 보면 수학적인 요소가 가미된 풀이들이 눈에 뛴다,,, 가령 행렬의 계산 같은것...? 미리 routes의 값을 행렬로 만든 후 [a+행렬, b+행렬] 이런식으로.. 조건문으로 ++, -- 없이 바로 행렬을 더해 버려서 수식과 로직을 좀더 간결이 한것.. 가장 중요한 부분은 javascript에서 지원하는 함수들을 어느정도 잘 활용해야 한다는 점, spread syntax를 잘 활용해야 한다는 점. 끝. function solution(park, routes) { let answer = [..
사진들을 보며 추억에 젖어 있던 루는 사진별로 추억 점수를 매길려고 합니다. 사진 속에 나오는 인물의 그리움 점수를 모두 합산한 값이 해당 사진의 추억 점수가 됩니다. 예를 들어 사진 속 인물의 이름이 ["may", "kein", "kain"]이고 각 인물의 그리움 점수가 [5점, 10점, 1점]일 때 해당 사진의 추억 점수는 16(5 + 10 + 1)점이 됩니다. 다른 사진 속 인물의 이름이 ["kali", "mari", "don", "tony"]이고 ["kali", "mari", "don"]의 그리움 점수가 각각 [11점, 1점, 55점]]이고, "tony"는 그리움 점수가 없을 때, 이 사진의 추억 점수는 3명의 그리움 점수를 합한 67(11 + 1 + 55)점입니다. 그리워하는 사람의 이름을 담은..
문제 생략....... 1.실패... (시간초과) indexOf 연산이 오래 걸림... 값이 있는지 검색 후 데이터를 업데이트 하는 과정이 O(n^2)...라고 한다.. function solution(players, callings) { let idxArr = []; callings.forEach(name => { let idx = players.indexOf(name); // 인덱스 번호를 설정 후 [players[idx], players[idx-1]] = [players[idx-1], players[idx]]; // 인덱스 와 인덱스 -1 값을 스프레드 신텍스를 활용하여 sort 한다. }); return players; } 2. 성공 미리 객체 형태고 {name : index} 형태로 만들어서 i..
문제 생략~~ 제한사항 1 ≤ ingredient의 길이 ≤ 1,000,000 ingredient의 원소는 1, 2, 3 중 하나의 값이며, 순서대로 빵, 야채, 고기를 의미합니다. 입출력 예 ingredientresult [2, 1, 1, 2, 3, 1, 2, 3, 1] 2 [1, 3, 2, 1, 2, 1, 3, 1, 2] 0 입출력 예 설명 입출력 예 #1 문제 예시와 같습니다. 입출력 예 #2 상수가 포장할 수 있는 햄버거가 없습니다. 풀이 - 여러가지 방법을 생각하게 만드는 문제였다.. 1. 재귀를 사용하여 잘라내고 남은 재료를 다시 돌리는 방법을 사용했는데 절반은 통과하고 절반은 실패.. 시간초과가 뜨는건 아닌데.. 실패하는데 걸리는 시간이 긴걸 보면 재료의 길이가 엄청 길게 주어져서 실패 한게..
문제 생략 3가지의 음식이 준비되어 있으며, 칼로리가 적은 순서대로 1번 음식을 3개, 2번 음식을 4개, 3번 음식을 6개 준비했으며, 물을 편의상 0번 음식이라고 칭한다면, 두 선수는 1번 음식 1개, 2번 음식 2개, 3번 음식 3개씩을 먹게 되므로 음식의 배치는 "1223330333221"이 됩니다. 따라서 1번 음식 1개는 대회에 사용하지 못합니다. 수웅이가 준비한 음식의 양을 칼로리가 적은 순서대로 나타내는 정수 배열 food가 주어졌을 때, 대회를 위한 음식의 배치를 나타내는 문자열을 return 하는 solution 함수를 완성해주세요. 제한사항 2 ≤ food의 길이 ≤ 9 1 ≤ food의 각 원소 ≤ 1,000 food에는 칼로리가 적은 순서대로 음식의 양이 담겨 있습니다. food[..
문제 설명 과일 장수가 사과 상자를 포장하고 있습니다. 사과는 상태에 따라 1점부터 k점까지의 점수로 분류하며, k점이 최상품의 사과이고 1점이 최하품의 사과입니다. 사과 한 상자의 가격은 다음과 같이 결정됩니다. 한 상자에 사과를 m개씩 담아 포장합니다. 상자에 담긴 사과 중 가장 낮은 점수가 p (1 ≤ p ≤ k)점인 경우, 사과 한 상자의 가격은 p * m 입니다. 과일 장수가 가능한 많은 사과를 팔았을 때, 얻을 수 있는 최대 이익을 계산하고자 합니다.(사과는 상자 단위로만 판매하며, 남는 사과는 버립니다) 예를 들어, k = 3, m = 4, 사과 7개의 점수가 [1, 2, 3, 1, 2, 3, 1]이라면, 다음과 같이 [2, 3, 2, 3]으로 구성된 사과 상자 1개를 만들어 판매하여 최대 ..
문제 설명 숫자나라 기사단의 각 기사에게는 1번부터 number까지 번호가 지정되어 있습니다. 기사들은 무기점에서 무기를 구매하려고 합니다. 각 기사는 자신의 기사 번호의 약수 개수에 해당하는 공격력을 가진 무기를 구매하려 합니다. 단, 이웃나라와의 협약에 의해 공격력의 제한수치를 정하고, 제한수치보다 큰 공격력을 가진 무기를 구매해야 하는 기사는 협약기관에서 정한 공격력을 가지는 무기를 구매해야 합니다. 예를 들어, 15번으로 지정된 기사단원은 15의 약수가 1, 3, 5, 15로 4개 이므로, 공격력이 4인 무기를 구매합니다. 만약, 이웃나라와의 협약으로 정해진 공격력의 제한수치가 3이고 제한수치를 초과한 기사가 사용할 무기의 공격력이 2라면, 15번으로 지정된 기사단원은 무기점에서 공격력이 2인 무..
문제 설명 문자열 s가 입력되었을 때 다음 규칙을 따라서 이 문자열을 여러 문자열로 분해하려고 합니다. 먼저 첫 글자를 읽습니다. 이 글자를 x라고 합시다. 이제 이 문자열을 왼쪽에서 오른쪽으로 읽어나가면서, x와 x가 아닌 다른 글자들이 나온 횟수를 각각 셉니다. 처음으로 두 횟수가 같아지는 순간 멈추고, 지금까지 읽은 문자열을 분리합니다. s에서 분리한 문자열을 빼고 남은 부분에 대해서 이 과정을 반복합니다. 남은 부분이 없다면 종료합니다. 만약 두 횟수가 다른 상태에서 더 이상 읽을 글자가 없다면, 역시 지금까지 읽은 문자열을 분리하고, 종료합니다. 문자열 s가 매개변수로 주어질 때, 위 과정과 같이 문자열들로 분해하고, 분해한 문자열의 개수를 return 하는 함수 solution을 완성하세요. ..