728x90
반응형
stack, queue 문제
맛집 줄 기다리기, 놀이기구 같이 타기 위해 기다리기
더보기
1.
배열 안에서 찾을 숫자를 뒤에서부터 찾는다고 했을 때
해당 숫자가 나오기 전까지의 모든 숫자들을 원본 배열에서 제거하고,
제거된 숫자들을 새로운 배열에 차례로 담은 후 마지막 숫자를 새로운 배열 끝에 담아
[ [제거된 원본 배열], [새로운 배열] ] 형태로 리턴해주세요.
예를 들어, arr 데이터로 [1, 2, 3] 을 받고, target 으로 1 을 받았을 때
배열에서 1 이전까지의 데이터인 3, 2 숫자 데이터를 차례로 새로운 배열에 담고
마지막으로 찾은 target 숫자 데이터인 1 을 배열의 가장 마지막에 넣으면
[3, 2, 1] 형태의 배열을 가질 수 있게 됩니다.
이때 리턴값으로, 숫자 전까지 삭제된 원본 배열과 새로운 배열을 2차원 배열 형태로 리턴해야 하므로
[ [], [3, 2, 1] ] 형태로 리턴합니다.
만약, 배열에 해당 숫자가 없다면 새로운 배열은 빈 배열을 리턴해주세요.
2.
Junny 는 여자친구와 함께 유명한 맛집에 가기 위한 계획을 짜려고 합니다.
이때, 해당 맛집에서 대기줄이 생길 때 자신의 차례가 몇번 째 차례이고
앞에 몇명이 있는지를 알려주는 어플을 개발하기로 했습니다.
현재 대기열을 나타내는 2차원 배열 queueArr 가 주어지고,
2차원 배열의 데이터 중 "Me" 가 대기열의 자신의 현재 위치를 나타낼 때
내 차례가 몇번 째 차례이며, 내 앞으로 몇명의 대기자가 있는지를
[ 차례, 대기자 수 ] 형태로 리턴해주세요.
예를 들어, queueArr 가
[ [1, 2], [3, 4], [5, 6, 7], [8], ["Me"], [9, 10] ]
와 같은 2차원 배열로 주어졌을 때
문자열 "Me" 를 담고 있는 배열 앞으로 4개의 배열이 있고
각각의 배열의 데이터의 수를 더하면
3.
Junny 는 Hoony 와 함께 놀이공원을 찾았습니다.
이 놀이공원에는 매우 유명한 롤러코스터가 하나 있는데
인기가 매우 많아 대기줄이 매우 긴편입니다.
Jonny 는 Hoony 함께 이 롤러코스터를 타고 싶지만
이 롤러코스터에는 한번 탈 때에 탑승할 수 있는 인원이 제한되어 있기 때문에
Hoony 와 한 열차에 탈 때까지 줄을 기다리려 합니다.
현재 대기열을 나타내는 2차원 배열 queueArr 가 매개변수로 주어지고
한 열차에 탑승할 수 있는 인원이 limit 로 주어졌을 때
Jonny 와 Hoony 가 몇 차례만에 함께 열차를 탈 수 있는지 리턴해주세요.
예시 ) 만약, queueArr 에
[ [1, 2, 3], [4, 5], [6, 7], ["Junny", "Hoony"], [8] ] 가 주어지고
limit 매개변수로 4 가 주어지게 될 때
첫번째 차례에는 [1, 2, 3, 4] 에 해당되는 인원들이 탑승할 수 있고
두번째 차례에는 [5, 6, 7, "Junny"] 에 해당되는 인원이 탑승할 수 있습니다.
하지만 Junny 는 Hoony 와 함께 탑승하기를 원하기 때문에
자신의 자리를 뒷자리에 있는 8 에게 양보하게 되고
이때 [5, 6, 7, 8] 에 해당하는 인원들이 롤러코스터에 탑승합니다.
다음 세번째 차례에 비로소 Junny 와 Hoony 가 함께 한 열차에 탑승하게 되므로
이때는 세번째 차례인 3 이 리턴됩니다.
!! 숫자 데이터를 담는 2차원 배열은 같은 그룹을 나타냅니다.
!! Junny 와 Hoony 는 반드시 같은 배열 안에 포함되어 있습니다.
!! Junny 와 Hoony 는 반드시 같은 열차에 탑승해야 합니다.
!! Junny 는 항상 Hoony 보다 앞에 있습니다.
!! limit 는 최소 2 이상의 수부터 주어집니다.
const baskets = [{ name: 'ddalgi', friend: 'banana'}, { name: 'banana', friend: 'kiwi'}, { name: 'ddalgi', friend: 'banana'}];
console.log(baskets.filter((el)=> if(el.name === 'ddalgi' ))
console.log(baskets);
// 1. =========================================
function stack (arr, target) {
let deleted = [];
if(!arr.includes(target)) {
return ([arr, []]);
} // 없으면 바로 리턴
for(let i = arr.length-1; i > 0; --i) {
if(arr[arr.length-1] === target) {
deleted.push(arr.pop());
break;
}
deleted.push(arr.pop());
if(target===arr[i-1]) {
deleted.push(arr.pop());
break;
}
}
return ([arr, deleted]);
}
stack([1, 2, 3, 4, 5], 5);
stack([1, 2, 3, 4, 5], 7);
stack([1, 2, 3, 4, 5], 3);
// 2. ==================*=======================
function queue_01 (queueArr) {
// 여기에 코드를 작성하세요.
let index = 0;
let humans = 0;
for(let i = 0; i < queueArr.length; ++i) {
if(queueArr[i].includes('Me')) index = i;
}
for(let i = 0; i < index; ++i) {
humans += queueArr[i].length;
}
return([index, humans])
}
queue_01([ [1, 2], [3, 4], [5, 6, 7], [8], ["Me"], [9, 10] ]);
// 3. ====================*====================
function queue_02 (queueArr, limit) {
// 여기에 코드를 작성하세요.
let index = 0;
let humans = 0;
let teams = 0;
for(let i = 0; i < queueArr.length; ++i) {
if(queueArr[i].includes('Junny')) index = i;
}
for(let i =0; i < index; ++i) {
humans += queueArr[i].length;
}
if(humans+2 <= limit) return 1
teams = Math.ceil(humans/limit)
return humans%limit + 2 > limit ? teams+1 : teams;
}
queue_02([ [1, 2, 3], [4, 5], [6, 7], ["Junny", "Hoony"], [8] ], 2)
queue_02(
[ [1, 2, 3], [4, 5], [6, 7], ["Junny", "Hoony"], [8] ],
100
)
queue_02(
[ [1, 2, 3], [4, 5], [6, 7], ["Junny", "Hoony"], [8] ],
3
)
숫자 문자열과 영단어
네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.
다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.1478 → "one4seveneight"
234567 → "23four5six7"
10203 → "1zerotwozero3"
이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.
// 테스트 5,7,8 실패
function solution(s) {
var answer = 0;
console.log(s);
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
let number= [0,1,2,3,4,5,6,7,8,9];
let index = 0;
let idx = 0;
let origin = '';
for(let i = 0; i < numbers.length; ++i){
if(s.includes(numbers[i])) {
// index = s.indexOf(numbers[i]);
// idx = i;
// console.log(numbers[i])
// // s안에 numbers[i]가 있어
// // numbers[i]를 number[i]로 바꾸면 됨
// console.log('잘라: ',s.slice(index, index+(numbers[i]).length))
// // 자른 걸 number[i]로 바꿔...
// origin = s.slice(index, index+(numbers[i]).length);
console.log(numbers[i], number[i]);
s = s.replace(numbers[i], number[i]);
}
// index 문자가 시작되는 index
// 원래 문자열은 변경되지 않는대!
}
return Number(s);
}
solution("oneoneoneone")
// 통과한 코드
function solution(s) {
var answer = 0;
console.log(s);
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
let number= [0,1,2,3,4,5,6,7,8,9];
for(let i = 0; i < numbers.length; ++i){
while(s.includes(numbers[i])) {
s = s.replace(numbers[i], number[i])
}
}
return Number(s);
}
// 조금 다듬기~~ i가 number[i]랑 같아서 필요없다.
function solution(s) {
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
for(let i = 0; i < numbers.length; ++i){
while(s.includes(numbers[i])) {
s = s.replace(numbers[i], i)
}
}
return Number(s);
}
solution("23four5six7");
solution("oneoneoneone");
728x90
반응형
'프론트엔드✏️ > 코드캠프' 카테고리의 다른 글
toast... react toast ui editor 사용하기 도전 약 4시간째 (0) | 2022.06.15 |
---|---|
220615 프론트엔드 부트캠프 36일차 : 웹 에디터(wysiwyg), XSS, OWASP, Hydration (0) | 2022.06.15 |
220614 프론트엔드 부트캠프 라라일차 : Generic, 브라우저 저장소, 장바구니 (0) | 2022.06.14 |
알고리즘 - 시저암호, 아스키코드 두시간 걸렸다... (0) | 2022.06.14 |
220613 프론트엔드 부트캠프 34일차: (0) | 2022.06.14 |