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

프로그래머스 0단계 입문 - 문자열 밀기 / 숨어있는 숫자의 덧셈 (2)

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

문자열 밀기

문자열 "hello"에서 각 문자를 오른쪽으로 한 칸씩 밀고 마지막 문자는 맨 앞으로 이동시키면 "ohell"이 됩니다. 이것을 문자열을 민다고 정의한다면 문자열 A와 B가 매개변수로 주어질 때, A를 밀어서 B가 될 수 있다면 밀어야 하는 최소 횟수를 return하고 밀어서 B가 될 수 없으면 -1을 return 하도록 solution 함수를 완성해보세요.

  • 0 < A의 길이 = B의 길이 < 100
  • A, B는 알파벳 소문자로 이루어져 있습니다.
function solution(A, B) {
  if(A === B) return 0;
  let answer = -1;
  for(let i = 1; i < A.length; i++) {
    const pushString = A.slice(-i);
    const pushedString = A.slice(0, A.length - i);
    if(pushString.concat(pushedString) === B) {
      answer = i;
      break;
    }
  }
  return answer;
}

// 다른 풀이 방법
let solution=(a,b)=>(b+b).indexOf(a)

두 문자열 A와 B가 같으면 밀어도 동일하므로 0을 반환한다.

for 문을 순회하여 만들 수 없으면, -1을 리턴한다.

 

for 문을 돌면서 뒤에서부터 잘라낸 요소를 pushString에 할당한다.

slice를 통해 원본 배열이 조작됐으므로, 0번 인덱스부터 잘라낸 요소를 pushedString에 할당한다.

이 둘을 concat 메서드로 합쳐서 B문자열과 같으면, i의 값이 정답이 된다. 

 

<다른 풀이 방법>

와... 미친, 한 줄 컷 대박이네...

문자열 B를 연이어 붙인 다음, 그 가운데, A의 문자열이 요소로 들어 있으면 반환된 인덱스가 정답이 된다.


숨어있는 숫자의 덧셈 (2)

문자열 my_string이 매개변수로 주어집니다. my_string은 소문자, 대문자, 자연수로만 구성되어있습니다. my_string안의 자연수들의 합을 return하도록 solution 함수를 완성해주세요.

  • 1 ≤ my_string의 길이 ≤ 1,000
  • 1 ≤ my_string 안의 자연수 ≤ 1000
  • 연속된 수는 하나의 숫자로 간주합니다.
  • 000123과 같이 0이 선행하는 경우는 없습니다.
  • 문자열에 자연수가 없는 경우 0을 return 해주세요.
function solution(my_string) {
  let result = 0;
    
  for(let i = 0; i < my_string.length; i++){
    let tmp = 0;
    while(!Number.isNaN(Number(my_string[i]))){
      tmp += my_string[i];
      i++;
    }
    result += Number(tmp);
  }  
  return result;
}

// 다른 풀이 방법
function solution(my_string) {
  var answer = 0;
  let num = '0';
  for (const c of Array.from(my_string)) {
    if (isNaN(+c)) {
      answer += +num
      num = '0'
      continue
    } else {
      num += c
    }
  }
  return answer + +num;
}

function solution(my_string) {
  return my_string.split(/\D+/).reduce((acc, cur) => acc + Number(cur), 0);
}

 

<다른 풀이 방법>

배열의 요소를 변수 c로 반복문을 돌려서 추출된 요소를 숫자형으로 바꾼다(+c).

만약 숫자가 아니라면(if (isNaN(+c)), 숫자 0을 answer에 더한 후, 다시 num ='0'으로 초기화해준다. continue 문을 통해, 다음 요소를 순회한다. 요소를 순회하다가 +c가 숫자일 경우에는 nem += c를 수행한다. 이러한 규칙으로 로직을 순회한다음 answer에 num += c로 인해, 누적된 숫자형 num의 값을 더한다.

댓글