Skip to content

Comments

[tkddbs587] 25.01.09#16

Merged
JooKangsan merged 11 commits intomainfrom
tkddbs587
Jan 16, 2025
Merged

[tkddbs587] 25.01.09#16
JooKangsan merged 11 commits intomainfrom
tkddbs587

Conversation

@tkddbs587
Copy link
Collaborator

[tkddbs587] 25.01.09

[스택]

📌 푼 문제

기초

문제이름 문제링크
문자열 뒤집기 https://school.programmers.co.kr/learn/courses/30/lessons/120822
컨트롤 제트 https://school.programmers.co.kr/learn/courses/30/lessons/120853
영어가 싫어요 https://school.programmers.co.kr/learn/courses/30/lessons/120894
문자열 계산하기 https://school.programmers.co.kr/learn/courses/30/lessons/120902
크레인 인형뽑기 게임 https://school.programmers.co.kr/learn/courses/30/lessons/64061
올바른 괄호 https://school.programmers.co.kr/learn/courses/30/lessons/12909

📝 간단한 풀이 과정

문자열 뒤집기

function solution(str) {
  var answer = "";
  for (let i = str.length - 1; i >= 0; i--) {
    // 문자열 변수 str의 마지막 인덱스부터 한글자씩 접근
    answer += str[i]; // 문자열 변수 answer에 추가
  }
  return answer; // 뒤집은 문자열 반환
}

컨트롤 제트

function solution(s) {
  let answer = 0;
  const arr = s.split(" "); // 공백을 기준으로 문자열을 배열로 변환
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] !== "Z") {
      // 배열 요소가 'Z' 가 아니면
      answer += Number(arr[i]); // Number 타입으로 변환 후 변수에 더하기
    } else {
      answer -= Number(arr[i - 1]); // 'Z' 면 현재 인덱스 하나 전 인덱스의 숫자 빼기
    }
  }
  return answer; // 최종 숫자 반환
}

영어가 싫어요

function solution(numbers) {
  let numArr = [
    "zero",
    "one",
    "two",
    "three",
    "four",
    "five",
    "six",
    "seven",
    "eight",
    "nine",
  ]; // 0 ~ 9 배열 생성
  let strNum = ""; // 숫자를 문자열로 표현한 numbers를 인덱스 순서대로 담을 변수
  let result = ""; // 숫자 단어에 해당하는 숫자를 담을 변수
  for (let i = 0; i < numbers.length; i++) {
    strNum += numbers[i]; // 변수에 numbers 인덱스 순서대로 담기

    if (numArr.includes(strNum)) {
      // 차례대로 담다가 배열에 해당하는 숫자가 있으면
      result += numArr.indexOf(strNum); // 해당 숫자 인덱스를 변수에 추가
      strNum = ""; // numbers에 있는 다음 숫자 단어를 더해주기 위해 초기화
    }
  }
  return Number(result); // 문자열로 돼있는 숫자 변수를 number 타입으로 변환 후 결과 반환
}

문자열 계산하기

function solution(my_string) {
  let arr = my_string.split(" "); // 공백을 기준으로 배열 생성
  console.log(arr);
  let result = Number(arr[0]); // 0번 인덱스 숫자로 변환 = 첫번째 숫자 구하고
  for (let i = 1; i < arr.length; i += 2) {
    // 홀수 인덱스 접근 = 연산자에 접근
    let operator = arr[i]; // 현재 연산자
    let NextNum = Number(arr[i + 1]); // 연산자 오른쪽 숫자
    if (operator === "+") {
      // 연산자가 + 면 더하고
      result += NextNum;
    } else {
      result -= NextNum; // - 면 빼기
    }
  }
  return result; // 결과 반환
}

올바른 괄호

function solution(s) {
  let stack = []; // 스택
  let arr = s.split(""); // 괄호 별로 잘라서 배열 생성
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === "(") {
      // 열린 괄호일때
      stack.push(arr[i]); // 스택에 열린 괄호 추가
    } else {
      // 닫힌 괄호일때
      stack.pop(); // 스택에 쌓아둔 열린 괄호 제거
    }
  }
  if (stack.length === 0) {
    // 스택이 비어있으면 짝이 맞다는 뜻이므로 length가 0
    return true; // 결과 반환
  } else {
    return false;
  }
}

크레인 인형뽑기 게임

function solution(board, moves) {
  // 2차원 배열 board를 각 열마다 스택 생성 5x5일 경우 총 5개의 스택 생성
  let stack = [...Array(board[0].length)].map(() => []);

  for (let i = board.length - 1; i >= 0; i--) {
    for (let j = 0; j < board[0].length; j++) {
      if (board[i][j] !== 0) {
        // 0이 아닐때만 각 스택에 추가
        stack[j].push(board[i][j]); // 스택의 각 열에 맞춰 board의 요소들 추가
      }
    }
  }

  let removeCount = 0;
  let bucket = [];

  for (let m of moves) {
    if (stack[m - 1].length > 0) {
      // 스택의 열에 인형이 존재하면
      const doll = stack[m - 1].pop(); // 맨 위의 인형 집어서
      // 바구니에 인형이 있고 맨 위의 인형이 지금 넣으려는 인형과 같으면
      if (bucket.length > 0 && bucket[bucket.length - 1] === doll) {
        bucket.pop(); // 바구니 맨 위의 인형 제거
        removeCount += 2; // 제거한 갯수 2개 추가
      } else {
        bucket.push(doll); // 바구니에 인형이 없거나 맨 위 인형과 같지 않은 인형이면 추가
      }
    }
  }

  return removeCount;
}

@tkddbs587 tkddbs587 self-assigned this Jan 9, 2025
Copy link
Collaborator

@Moonjonghoo Moonjonghoo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

한주 고생하셨습니다!

}

return newArr.sort((a, b) => a - b); // 오름차순 정렬
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드를 보다가 생각이난건데, filter 처리하는 부분과 배열이 비어있는지를 나눠서 만들었는데 리턴할떄 삼항연산자로 표현해도 깔끔할거같아요

return newArr.length ? sort된 결과 : [-1]

stack[stack.length - 1] *= 2; // 해당 점수 2배
stack[stack.length - 2] *= 2; // 바로 전 점수도 2배
}
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

영어가싫어요처럼 상태를 객체로 매칭해도 괜찮을거같습니다!

let result = 0;
for (let i = 0; i < stack.length; i++) {
result += stack[i]; // 총 점수 구하기
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

reduce 를 활용해보는것도 좋을거같습니다

@JooKangsan JooKangsan merged commit 3b38aa3 into main Jan 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants