3 minute read

프로그래머스에 소개된 Level 1 문제 5종을 자바스크립트로 풀이해보았다.

1. 서울에서 김서방 찾기

  • 문제 설명
    String형 배열 seoul의 element중 “Kim”의 위치 x를 찾아, “김서방은 x에 있다”는 String을 반환하는 함수, solution을 완성하세요.
    seoul에 “Kim”은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

  • 제한 사항
    • seoul은 길이 1 이상, 1000 이하인 배열입니다.
    • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
    • “Kim”은 반드시 seoul 안에 포함되어 있습니다.
  • 입출력 예

    seoul return
    [“Jane”, “Kim”] “김서방은 1에 있다”
  • 나의 풀이
    • 풀이 1
      function solution(seoul) {
      var answer = '';
      
      for(let i = 0; i < seoul.length; i++){ // "Kim"의 위치를 찾기 위한 반복문
          if(seoul[i] === "Kim"){
              answer = i; // "Kim"의 위치를 answer에 대입
              return "김서방은 " + answer + "에 있다";
          }
      }
      }
      
    • 풀이 2
      function solution(seoul) {
      var answer = '';
      
      answer = seoul.indexOf("Kim"); // "Kim"의 위치를 indexOf()를 통해 얻음
          
      return "김서방은 " + answer + "에 있다";
      }
      

2. 가운데 글자 가져오기

  • 문제 설명
    단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요.
    단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

  • 제한사항
    • s는 길이가 1 이상, 100이하인 스트링입니다.
  • 입출력 예

    s return
    “abcde” “c”
    “qwer” “we”
  • 나의 풀이
    function solution(s) {
      var answer = '';
      let len = s.length;
      
      if(len % 2 > 0){ // s의 길이가 짝수인지 홀수인지 판단
          answer = s.charAt(len / 2);
      } else{
          answer = s.charAt(len / 2 - 1) + s.charAt(len / 2);
      }
        
      return answer;
    }
    

3. 수박수박수박수박수박수?

  • 문제 설명
    길이가 n이고, “수박수박수박수….”와 같은 패턴을 유지하는 문자열을 리턴하는 함수, solution을 완성하세요.
    예를들어 n이 4이면 “수박수박”을 리턴하고 3이라면 “수박수”를 리턴하면 됩니다.

  • 제한 조건
    • n은 길이 10,000이하인 자연수입니다.
  • 입출력 예

    n return
    3 “수박수”
    4 “수박수박”
  • 나의 풀이
    function solution(n) {
      var answer = '';
        
      for(let i = 0; i < n; i++){
          if(i % 2 === 0){
              answer += ""; // 문자열의 홀수번째 자리에 "수" 대입
          } else{
              answer+= ""; // 문자열의 짝수번째 자리에 "박" 대입
          }
      }
        
      return answer;
    }
    

4. 핸드폰 번호 가리기

  • 문제 설명
    프로그래머스 모바일은 개인정보 보호를 위해 고지서를 보낼 때 고객들의 전화번호의 일부를 가립니다. 전화번호가 문자열 phone_number로 주어졌을 때, 전화번호의 뒷 4자리를 제외한 나머지 숫자를 전부 *으로 가린 문자열을 리턴하는 함수, solution을 완성해주세요.

  • 제한 조건
    • s는 길이 4 이상, 20이하인 문자열입니다.
  • 입출력 예

    phone_number return
    “01033334444” ”*******4444”
    “027778888” ”*****8888”
  • 나의 풀이
    • 풀이 1
      function solution(phone_number) {
      var answer = '';
      
      for(let i = 0; i < phone_number.length; i++){
          if(i < phone_number.length - 4){
                answer += "*"; // phone_number의 마지막 4자리수 전까지 "*" 대입
          } else{
              answer += phone_number.charAt(i); // 마지막 4자리수는 그대로 대입
          }
      }
          
      return answer;
      }
      
    • 풀이 2
      function solution(phone_number) {
      var answer = '';
      let count = 0;
          
      while(count < phone_number.length - 4){
          answer += "*";
          count++;
      } // phone_number의 마지막 4자리수 전까지 "*" 대입
      answer += phone_number.substring(phone_number.length - 4); // 마지막 4자리수는 substring()을 이용하여 그대로 대입
          
      return answer;
      }
      

5. 숫자 문자열과 영단어

  • 문제 설명
    img1

    네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다.

    다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다.

    • 1478 → “one4seveneight”
    • 234567 → “23four5six7”
    • 10203 → “1zerotwozero3”

    이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다.
    s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요.

    참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다.

    숫자 영단어
    0 zero
    1 one
    2 two
    3 three
    4 four
    5 five
    6 six
    7 seven
    8 eight
    9 nine
  • 제한사항
    • 1 ≤ s의 길이 ≤ 50
    • s가 “zero” 또는 “0”으로 시작하는 경우는 주어지지 않습니다.
    • return 값이 1 이상 2,000,000,000 이하의 정수가 되는 올바른 입력만 s로 주어집니다.
  • 입출력 예

    s result
    “one4seveneight” 1478
    “23four5six7” 234567
    “2three45sixseven” 234567
    “123” 123
  • 입출력 예 설명
    • 입출력 예 #1
      • 문제 예시와 같습니다.
    • 입출력 예 #2
      • 문제 예시와 같습니다.
    • 입출력 예 #3
      • “three”는 3, “six”는 6, “seven”은 7에 대응되기 때문에 정답은 입출력 예 #2와 같은 234567이 됩니다.
      • 입출력 예 #2와 #3과 같이 같은 정답을 가리키는 문자열이 여러 가지가 나올 수 있습니다.
    • 입출력 예 #4
      • s에는 영단어로 바뀐 부분이 없습니다.
  • 제한시간 안내
    • 정확성 테스트 : 10초
  • 나의 풀이
    function solution(s) {
      var answer = 0;
      let temp = ''; // 문자열 s를 담을 임시 변수
        
      if(s.length >= 1 && s.length <= 50){ // 조건 체크 1
          if(s.charAt(0) !== "z" && s.charAt(0) !== "0"){ // 조건 체크 2
              temp = s.replace(/zero/g, "0");
              temp = temp.replace(/one/g, "1");
              temp = temp.replace(/two/g, "2");
              temp = temp.replace(/three/g, "3");
              temp = temp.replace(/four/g, "4");
              temp = temp.replace(/five/g, "5");
              temp = temp.replace(/six/g, "6");
              temp = temp.replace(/seven/g, "7");
              temp = temp.replace(/eight/g, "8");
              temp = temp.replace(/nine/g, "9"); // replace()를 이용해 모든 문자로 된 숫자를 진짜 숫자로 바꿈
          }
      }
      answer = Number(temp); // 문자열 temp를 숫자타입으로 변환
      return answer;
    }
    

Leave a comment