본문 바로가기
코딩테스트/프로그래머스 0단계 - 기초 트레이닝

프로그래머스 0단계 - 수 조작하기 1 / 첫 번째 나오는 음수

by 학습하는 청년 2024. 4. 7.

수 조작하기 1

정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.

  • "w" : n이 1 커집니다.
  • "s" : n이 1 작아집니다.
  • "d" : n이 10 커집니다.
  • "a" : n이 10 작아집니다.

위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.

  • -100,000 ≤ n ≤ 100,000
  • 1 ≤ control의 길이 ≤ 100,000
    control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.
function solution(n, control) {
  let result = n;
  for (let i = 0; i < control.length; i++) {
    if (control[i] === 'w') result += 1;
    if (control[i] === 's') result -= 1;
    if (control[i] === 'd') result += 10;
    if (control[i] === 'a') result -= 10;
  }
  return result;
}

// 다른 사람의 풀이
function solution(n, control) {
  for(let i = 0 ; i < control.length ; i++){
    switch(control[i]) {
      case "w" : n++; break;
      case "s" : n--; break;
      case "d" : n+=10; break;
      case "a" : n-=10; break;
    }
  }
  return n;
}

문자의 요소를 순회하면서 해당 문자에 해당할 경우 값을 계산하도록 작성했다.

 

<다른 사람의 풀이에 대한 이해>

스위치문으로 해결. 익히는 차원에서 가져왔다.


첫 번째로 나오는 음수

정수 리스트 num_list가 주어질 때, 첫 번째로 나오는 음수의 인덱스를 return 하도록 solution 함수를 완성해주세요. 음수가 없다면 -1을 return합니다.

  • 5 ≤ num_list의 길이 ≤ 100
  • -10 ≤ num_list의 원소 ≤ 100
function solution(num_list) {
  let indexCnt = 0;
  let result = 0;
  for (let i = 0; i < num_list.length; i++) {
    if (num_list[i] < 0) {
      result = i;
      indexCnt++;
      break;
    }
  }
  return indexCnt > 0 ? result : -1;
}

// 다른 사람의 풀이
const solution = num_list => num_list.findIndex(v => v < 0)

1) 배열의 요소를 순회하다가 음수가 나오면 해당 인덱스 위치값 i를 result에 할당한다.

2) 배열의 요소에 음수가 여러 개 있을 수 있으므로, break; 를 통해 첫 번째 음수의 인덱스만 구한다.

3) 인덱스 카운트가 1 이상이면 음수가 있으므로, 해당 인덱스 값을 아니면 -1을 반환한다.

 

2) 번에서 break를 생각 못해서 20분을 고민했다.

3) 번에서 indexCnt 아이디어가 안 떠올라서 또 20분을..  중첩 반복문도 써봤다가 지웠다가 머리 뜯었다가 비볐다가.. ㅋ 어휴

 

<다른 사람의 풀이에 대한 이해>

findIndex()는 조건에 맞는 값이 나오면 해당 인덱스를 반환하고, 없다면 -1을 반환한다.

 

이를 사용하면, 한 번에 풀 수 있지만 반복문 연습을 위해 무식하게 for문으로 해결하였다.

댓글