고양이와 코딩
[프로그래머스] 알고리즘 12월01일 ~ 12월10일 본문
12월01일
같은 숫자는 싫어 - 스택
처음에는 arr[i] === arr[i + 1] 일 경우 answer배열에 담고 answer.pop()으로 지우자! 라고 생각했다
근데.. 중간에 중복되지 않는 값은 어떻게 그자리에 삽입해야할지 감이 안왔고..
앞 뒤 숫자가 다를 때 삽입하는 방법으로 수정했다!!
function solution(arr)
{
var answer = [];
for (let i = 0; i < arr.length; i++){
if(arr[i] !== arr[i - 1]){
answer.push(arr[i]);
}
}
return answer;
}
처음에는 arr[i] !== arr[i + 1] 로 제출했는데, 테스트케이스도 통과하고 제출했지만 연속된 숫자가 세개 이상일때 문제가 생길 것 같아서
이렇게 수정했다 ㅎㅎ
기능개발
내 풀이
function solution(progresses, speeds) {
var answer = [];
let day = [];
for (let i = 0; i <progresses.length; i++){
day[i] = Math.ceil((100 - progresses[i]) / speeds[i]);
if(day[i - 1] > day[i]){
day[i] = day[i - 1];
}
}
day.forEach((value) => {
answer[value] = (answer[value] || 0) + 1;
});
return answer.filter((value) => value !== undefined);
}
레벨..레벨 2 도전 ~
day.forEach((value) => {
answer[value] = (answer[value] || 0) + 1;
});
return answer.filter((value) => value !== undefined);
}
아니 이 부분이 넘 [7,7,9] 있으면 그냥 숫자 갯수만 세면 되는건데...
어케해야할지 몰라서 지피티한테 물어봤더니 일케 알려줬어요..ㅠㅠ
설명 들어들어 이해했으니 남겨놓겠습니다
- value는 day 배열의 각 요소를 나타냅니다.
- answer[value]는 value 값을 answer 배열의 인덱스로 사용합니다.
- (answer[value] || 0)는 answer[value]가 존재하지 않거나, 값이 0 또는 falsy한 값이라면 0으로 초기화합니다.
- + 1은 해당 인덱스 위치에 있는 값에 1을 더합니다. 이를 통해 value 값이 answer 배열에서 몇 번 등장하는지를 카운트하게 됩니다.
12월04일
올바른 괄호 - 스택
흠 너무 익숙한문제.. ㅎㅎ( 성공 못함 )
첫 번째 풀이
function solution(s){
let arr_s = s.split();
for (let i = 0; i < s.length; i++){
if(s[0] !== "("){
return false;
} else if (s[i] == "(" && s[i + 1] == ")"){
return true
} else if (s[s.length - 1] == "("){
return false;
}
}
}
알고리즘인데 이렇게 풀어도 되는진 모르겠으나.. 그리구 몇 개의 테스트 케이스를 통과하지 못했따.
이렇게 풀면 안됩니다!!!!!
제출 코드
function solution(s){
const stack = [];
for (let i = 0; i < s.length; i++){
if (s[i] === '('){
stack.push(s[i]);
} else if (s[i] === ')'){
if(stack.length === 0 || stack.pop() !== '('){
return false;
}
}
}
return stack.length === 0 ? true : false;
}
스택 배열을 만들어서 s[i]가 ( 라면 stack에 넣고, i가 ) 면서 s[i]가 ) 라면 stack.pop으로 제거한다.
마지막에 스택의 길이가 0이라면 true를 반환, 아니라면 false를 반환한다 ㅎㅎ
12월06일
프로세스
문제가 정말 이해가 안되어요,, 설명 찾아보고 알았습니다 ㅜㅜ
솔직히 큐 알고리즘 풀어 본 적도 없고 그냥 max함수 써서 어떻게든 해보려고 했는데 도저히 답이 안나와서 답 봤어요.. ^^
알고 넘어가는게 중요하지 않을까요 ? (제발..)
function solution(priorities, location) {
let queue = priorities.map((priority, idx) => ({ priority, idx }));
let count = 0;
while (queue.length > 0) {
let current = queue.shift();
if (queue.some(item => item.priority > current.priority)) {
queue.push(current);
} else {
count++;
if (current.index === location) {
return count;
}
}
}
}
먼저 priorities를 우선순위와 인덱스로 묶어서 queue라는 배열로 다시 생성해줍니다.
[{ priority: 2, idx: 0} , {priority: 1, idx: 1} ..... ] 이런 형태로 나와요
while문은 queue배열이 비어있지 않다면 계속 반복 실행됩니다 !
그리고 shift() 함수는 배열에서 첫 번째 요소를 제거하고 그 값을 반환해 주는데요, 변수 current에는 queue의 첫 번째 요소인 프로세스가 저장됩니다 (위 예시에서는 current가 { priority: 2, idx: 0 })
if문은 만약 현재 priority 객체 중에서 current보다 우선순위가 높은 것이 있다면 !!을 말하고 있고요, some()함수는 주어진 조건을 만족하는 요소가 배열 내에 하나라도 있는지를 확인합니다.
'javascript' 카테고리의 다른 글
[프로그래머스] 12월11일 ~ 12월17일 (0) | 2023.12.11 |
---|---|
[프로그래머스] 12월04일 ~ 12월10일 (0) | 2023.12.04 |
[프로그래머스] 11월29일 ~ 12월03일 (0) | 2023.11.29 |
[프로그래머스] 11월21일 ~ 11월27일 (0) | 2023.11.21 |
[프로그래머스] 11월14일 ~ 11월20일 (0) | 2023.11.15 |