Skip to content

Conversation

@JooKangsan
Copy link
Collaborator

배열

md 파일로 추가했습니다!

📌 푼 문제

문제이름 문제링크
문자열 뒤집기 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
다트 게임 https://school.programmers.co.kr/learn/courses/30/lessons/17682


📝 간단한 풀이 과정

문자열 뒤집기

  • �문자를 한글자씩 쪼갠후 리버스 메소드를 사용해서 뒤집은 뒤 합쳤습니다.
function solution(my_string) {
  return my_string.split('').reverse().join('');
}

컨트롤 제트

  • 문자열을 split으로 분리한 후, Z면 마지막에 추가된 값을 pop으로 제거하고, 아니면 숫자로 변환해 push한 다음, 모든 숫자를 더해서 반환했습니다.
function solution(s) {
  let stack = [];
  let arr = s.split(" ");

  for(let i = 0; i < arr.length; i++) {
      if(arr[i] === "Z") {
          stack.pop();
      } else {
          stack.push(Number(arr[i]));
      }
  }

  let sum = 0;
  for(let i = 0; i < stack.length; i++) {
      sum += stack[i];
  }

  return sum;
}

영어가 싫어요

  • zero부터 nine까지의 단어를 순서대로 해당하는 숫자로 replace하여 반환합니다.
function solution(numbers) {
    const nums = ['zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'];
    let answer = numbers;
    
    for(let i = 0; i < nums.length; i++) {
        answer = answer.replaceAll(nums[i], i);
    }
    
    return Number(answer);
}

문자열 계산하기

  • 숫자와 부호는 각각 공백으로 띄워져 있어서 공백(" ")을 기준으로 나눴습니다.
  • 모든 구조는 숫자 부호 숫자 부호 숫자 부호 순서이기 때문에 두칸씩 이동했습니다.
  • 부호가 + 라면 뒤의 숫자를 변경하고 부호가 - 라면 뒤의 숫자를 뺍니다.
function solution(my_string) {
  let arr = my_string.split(' ');
  let result = Number(arr[0]);

  for(let i = 1; i < arr.length; i += 2) {
      const sign = arr[i];
      const num = Number(arr[i + 1]);

      if(sign === '+') {
          result += num;
      }
      if(sign === '-') {
          result -= num;
      }
  }

  return result;
}

크레인 인형뽑기 게임

  • 최근에 풀었던 문제라 기억을 되살려 가면서 풀었습니다.
  • 2차원 배열을 세로로 탐색 -> 스택을 사용하여 같은 인형이 연속되면 제거 -> 제거된 인형 개수를 카운트
function solution(board, moves) {
  let answer = 0;
  let stack = [];

  for(let move of moves) {
      let col = move - 1;

      for(let row = 0; row < board.length; row++) {
          if(board[row][col] !== 0) {
              let doll = board[row][col];
              board[row][col] = 0;
              if(stack[stack.length - 1] === doll) {
                  stack.pop();
                  answer += 2;
              } else {
                  stack.push(doll);
              }
              break;
          }
      }
  }

  return answer;
}

올바른 괄호

function solution(s){
  const stack = [];

 for (let i = 0 ; i < s.length ; i++) {
     if(s[i] == '('){
         stack.push(')');
     }else if(s[i] == '['){
         stack.push(']');
     }else if(s[i] == '{'){
         stack.push('}');
     }else{
         if (s[i] !== stack.pop()) {
             return false;
         }
     }
 }
 return stack.length === 0;
}

다트게임

  • 가장 시간이 좀 걸렸던 문제인거같아요
  • 문자열을 순회하며 숫자, 보너스, 옵션을 구분
  • 스택을 사용하여 이전 점수들을 관리
  • 각 옵션에 따른 점수 계산 수행
    했습니다.
function solution(dartResult) {
  let scores = [];
  let currentNumber = '';

  for(let i = 0; i < dartResult.length; i++) {
      let char = dartResult[i];

      if(!isNaN(char)) {
          currentNumber += char;
      }
      else if(char === 'S' || char === 'D' || char === 'T') {
          let score = Number(currentNumber);

          if(char === 'D') score = Math.pow(score, 2);
          if(char === 'T') score = Math.pow(score, 3);

          scores.push(score);
          currentNumber = '';
      }
      else {
          if(char === '*') {
              scores[scores.length-1] *= 2;
              if(scores.length > 1) {
                  scores[scores.length-2] *= 2;
              }
          }
          else if(char === '#') {
              scores[scores.length-1] *= -1;
          }
      }
  }

  return scores.reduce((acc, cur) => acc + cur, 0);
}

@JooKangsan JooKangsan self-assigned this Jan 12, 2025
Copy link
Collaborator

@bona1122 bona1122 left a comment

Choose a reason for hiding this comment

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

올바른괄호 같은 짝을 찾는 문제에서 여는 괄호가 나오면 바로 닫는 괄호를 넣어주는 방법도 가능하군요, 저는 map을 활용해서 짝을 명시했는데, 이렇게 하니까 좀 더 이해하기 쉬운 코드 같습니다. 다른 코드들도 많이 배우고 갑니다 :)

@@ -0,0 +1,3 @@
function solution(my_string) {
return my_string.split('').reverse().join('');
Copy link
Collaborator

Choose a reason for hiding this comment

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

문자열도 이터러블해서 스프레드 연산자로 쓰면 더 가독성 있을 것 같습니다!

[...my_string].reverse().join('');

@JooKangsan JooKangsan merged commit 990038f into main Jan 16, 2025
3 checks passed
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